java IO流-处理流

2023-12-18 16:35:10

1、缓冲流

BufferedReader是最好用的文本读入方式其它的不常用,了解一下就行。

  • 带有缓冲区的数据流,大概意思就是会把你要的数据读取完成之后一次发给你。

BufferedInputStream

  • BufferedInputStream in = new BufferedInputStream(new FileInputStream(new File("filename")));

BufferedOutputStream

  • BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File("filename")));

BufferedReader (最好用的文本读入方式)

  • BufferedReader br = new BufferedReader(new FileReader(new File("filename")));

BufferedReader br = new BufferedReader(new FileReader(new File("a.txt")));
String str = "";
while((str = br.readLine()) != null) {
    System.out.println(str);
}
br.close();

BufferedWriter

  • BufferedWriter bw = new BufferedWriter(new FileWriter(new File("filename")));

2、转换流

  • 转换流只能将字节流转换为字符流

InputStreamReader OutputStreamWriter,分别为读取与写入中字节流与字符流的转化。

使用:

System.in 是字节流,从输入中读取,首先用InputStreamReader将字节流转为字符流,然后就能用缓冲流中的BufferedReader来读取字符流中的文本数据

System.out是字节流,输出在黑框中,首先使用OutputStream将其转换为字符流,然后就可以用字符流进行输出。

  • 其它的字节流用法跟这个相同,都是一层一层套。

  • 记得flush,否则是不会在黑框中显示的。

  • 需要注意的是如果将System.in关闭也就是close,那么通道就会关闭,所以这个流是不用进行关闭的。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("字符串 + " + br.readLine());
Writer writer = new OutputStreamWriter(System.out);
writer.write("asdfa ");
writer.flush();

3、对象流

ObjectInputStream 对象读取

// ? ? ? ? ? ? ? ? ? ? ? ? ? 对象读取流、处理流 ? ? ? 节点流 ? ? ? ? ? ? ? 目标文件
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("person.dat")));
Object o = ois.readObject(); // 读取一个对象
Person p = (Person)o;
System.out.println(p.getName() + " " + p.getAge() + " " + p.getId());

ObjectOutputStream 对象写入

// ? ? ? ? ? ? ? ? ? ? ? ? ? 对象写入流、处理流 ? ? ? 节点流 ? ? ? ? ? ? ? 目标文件
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("person.dat")));
Person person = new Person(1, "张淏", 21);
oos.writeObject(person); // 直接写入一个对象
oos.flush();
oos.close();
  • 序列化,就是将一个对象转化成字节的过程,如果所需要存储的对象没有进行序列化,则会失败报错

Exception in thread "main" java.io.NotSerializableException: com.obj.Person at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at com.obj.test.main(test.java:9)

  • 反序列化:就是把字节转化成对象

  • 所以需要对操作的对象进行序列化操作,因为类都是支持序列化操作的,只不过默认是不打开的,只需要实现一下Serializable接口即可,只需要implements一下即可不需要真的进行实现。

public class Person implements Serializable {
    // 。。。 
}

文章来源:https://blog.csdn.net/qq_64468032/article/details/135063537
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。