- 流根据方向分可分为:输入流、输出流,输入输出是相对于内存而言。
- 根据读取类型的方向可分为:字节流,字符流。
- 字节流:适合读取图片,视频,音乐等二进制文件(都以stream结尾)
- 字符流:适合读取存文本文件(都包含Read 或 write)
- 四大家族(InputStream,OutputStream,Reader,Write)继承关系图
应用程序中把把输入放入文件中,相当于把一缸水倒入另一缸水中
字节流:
FileOutputStream :write();方法相当于一滴一滴的倒入缸中;
DateOutputStream:write();方法相当于一瓢水一瓢水的放入缸中;
BufferOutputStream:write();方法相当于一瓢水一瓢水的放入桶中,然后一桶水再倒入缸中;
文本,文件,文本文件的理解:
文本:16位无符号的整数,是字符的unicode编码(双字节编码);
文件:是byte byte byte …的数据序列;
文本文件:是文本(char)序列按照某种编码方式序列化为byte的存储。
字符流:
InputStreamReader 完成byte流解析为char流的过程,按照指定的编码进行解析(默认为GBK);
OutputStreamWrite 完成char流到byte流;按照指定的编码进行解析(默认为GBK);
BufferReader : 一次性读一行
BufferWrite : 一次性写一行
代码使用事例:
//InputStreamReader FileOutputStream
FileInputStream file = new FileInputStream("E:\\111.txt");
InputStreamReader isr = new InputStreamReader(file);
FileOutputStream out = new FileOutputStream("E:\\222.txt");
OutputStreamWriter osw = new OutputStreamWriter(out,"gbk");
int c;
while((c = isr.read()) !=-1){
osw.write(c);
osw.flush();
}
isr.close();
osw.close();
//BufferedInputStream BufferedOutputStream
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\111.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\222.txt"));
int c1;
byte [] b = new byte[8*1024];
while((c1 = bis.read(b, 0, b.length)) != -1){
bos.write(b);
}
bis.close();
bos.close();
//BufferedReader BufferedWrite
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\111.txt")));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:\\333.txt")));
String line;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
//printwrite
BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\111.txt")));
PrintWriter pw = new PrintWriter("E:\\444.txt");
String line1;
while((line1 = br1.readLine()) != null){
pw.println(line);
pw.flush();
}
br.close();
pw.flush();
- 对象的序列化与反序列化
序列化:将Object对象转成byte ,反正则是反序列化
序列化流:ObjectOutputStream
反序列化流:ObjectInputStream
类需要实现Serializable接口
//序列化
String file = "e:/obj.dat";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
Student student = new Student("11","22","33");
oos.writeObject(student);
oos.close();*/
//反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
Student student = (Student)ois.readObject();
System.out.println(student.toString());
--Student类
public class Student implements Serializable{
private String userName;
private String id;
private String age;
public Student(){
}
public Student(String userName, String id, String age) {
super();
this.userName = userName;
this.id = id;
this.age = age;
}
@Override
public String toString() {
return "Student [userName=" + userName + ", id=" + id + ", age=" + age
+ "]";
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}