java IO流-处理流
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 {
// 。。。
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!