1 不同设备之间的数据传输就是流,可以抽象理解供水厂到家庭之间的水管,水(数据)在管道传输,就成了流
2 根据流向分为输出流和输入流
数据从文件流向程序称为输入流
数据从程序流向文件称为输出流
3 根据数据类型分为字节流和字符流
字节流处理字节数据
字符流处理字符数据
4 IO流属于阻塞操作,一般项目中应放到子线程中,避免阻塞主线程
其中几个常见流之间的继承关系如下
在了解各种流之前,先看看File类
其构造函数
File(String pathname)
//返回一个File类
//其参数地址的反斜杠应反斜杠转义C:\\Users\\Howl\\Desktop\\FileInputStream.txt
其方法
boolean exists() //文件是否存在
boolean delete() //删除文件
boolean createNewFile() //创建文件
能处理各类数据,比如字符和图片视频
从本地文件读写字节流,先看二者构造函数,还有各自的方法
FileInputStream(File file) //参数为一个File类型
FileOutputStream(File file, boolean append) //第二个参数表示覆盖还是追加
FileInputStream
int read() //返回下一个字节的值,到了末尾返回-1
int read(byte[] b) //把字节放入数组b,返回读取的字节个数
int read(byte[] b,int off,int len) //把字节放入数组b,后两参数代表始末位置,返回读取的字节个数
void close() //关闭流
FileOutputStream
void write(int b) //只读取低8位
void write(byte[] b) //和上面同理
void write(byte b,int off,int len)
void close() //关闭流
对象的序列化和反序列化
其构造方法
ObjectInputStream (InputStream in)
ObjectOutputStream (OutputStream out) //参数类型为字节流
其方法
返回值 | 函数 | 说明 |
---|---|---|
void | writeObject(Object obj) | 往流中写入一个对象 |
Object | readObject() | 从流中读取一个对象 |
实例
public static void main(String[] args) {
//准备
User user = new User(20,"1210911104@qq.com","Howl");
File file = new File("C:\\Users\\Howl\\Desktop\\ObjectOutputStream.txt");
//自动关闭资源
try( FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream obs = new ObjectOutputStream(fos);){
if(!file.exists()){
file.createNewFile();
}
//先写入对象
obs.writeObject(user);
System.out.println("写入成功\n");
//读取对象
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
User user2 = (User) ois.readObject();
System.out.println("读入成功\n" + user2.getId() + "--" + user2.getEmail() + "--" + user2.getPassword());
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
打印,桌面多了一个ObjectOutputStream.txt文件,存放序列化的对象
写入成功
读入成功
20--1210911104@qq.com--Howl
只能处理字符数据
字节流转换成字符流
其构造函数,第一个参数是字节流,第二参数指定是字符集一般写utf-8
InputStreamReader(InputStream in, Charset cs)
OutputStreamWriter(OutputStream out, Charset cs)
转换流的方法和2.1.1方法很类似但区别在于参数是byte还是int或String类型
InputStreamReader
int read()
int read(char[] cbuf, int offset, int length)
OutputStreamWriter
void write(int c)
void write(char[] cbuf, int off, int len)
void write(String str, int off, int len)
从本地文件读写字符流
构造函数,并且方法和父类一致,这里不介绍了
FileReader(File file)
FileWriter(File file, boolean append)
带缓冲区的流,减少访问磁盘次数,提高性能,其构造函数
BufferedReader(Reader in) //以字符流为参数,例如FileReader
BufferedWriter(Writer out) //以字符流为参数,例如FileWriter
BufferedReader有一个特有方法
String readLine() //读取一行字符,返回字符串
BufferedWriter也有一个特殊方法
void newLine() //写入行分隔符
原文:https://www.cnblogs.com/Howlet/p/12033337.html