JavaIO流的总结!

xiaoxiao2021-02-28  123

IO流:

 

                      输出流:OutputStreamWriter 作为基类

 

按流向区分

 

                   输入流:InputStreamReader 作为基类

 

输入输出流是相对于计算机内存来说的,而不是相对于源和目标。

                                                     字节流输出:InputStream

                                      字节流:字节流输入:OutputStream

按照处理数据单元划分

                                     字符流:字符流输出:Reader

                                                   字符流输入:Writer

字节流是8位通用字节流,字符流是16Unicode字符流。

 

节点流:可以直接从数据源或目的地读写数据。

处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作和提高性能。

节点流和处理流的关系:

节点流处于io操作的第一线,所有操作必须通过他们进行。处理流可以对其他流进行处理(提高效率或操作灵活性)。

文本读写:用FileInputStream FileOutputStream BufferedReader BufferedWriter

二进制文件的读写:

DataInputStream DataOutputStream 读写二进制文件以及基本数据类型

对象的读写:

ObjectInputStream ObjectOutputStream读写对象(序列化和反序列化)

创建FileOutputStream(String name,bolleanappend)实例时,如果相应的文件并不存在,则会自动创建一个空的文件。不加后面boolean类型的判断时,则会覆盖文件中的所有内容。

// 创建一个文件输入字节流对象 File f = new File("d:/abc.txt"); FileInputStream fis = new FileInputStream(f); // 开始读每次一个字节 int len ; byte[] b = new byte[1024]; while ((len=fis.read(b)) != -1) { // byte[]转String System.out.println(new String(b)); } // 读完之后 fis.close();

FileReader fr = new FileReader("d:/123.txt"); int len = 0; char[] a = new char[1024]; StringBuffer sb = new StringBuffer(); while ((len = fr.read(a)) != -1) { sb.append(a); } fr.close(); 以上是文件读写的两个例子。

缓冲流:带有缓冲区可以提高读取的速度。

BufferedInputStream BufferedOutputStream 字节缓冲流

BufferedReader BufferedWriter 字符缓冲流

FileWriter fw=new FileWriter("d:/123.txt"); BufferedWriter bw=new BufferedWriter(fw); fw.write("世界如此美好!"); bw.flush();//刷新缓存(只有刷新了才可以写入文件) fw.close(); bw.close();

字节流转字符流:InputStreamReader(字符流对象,编码方式”)

序列化和反序列化 目的:持久化对象,将对象在网络上进行传输。

序列化:将内存中的对象转换位流。

反序列化:将流装换为内存中的对象。

 

ObjectOutputStream ots=new ObjectOutputStream(new FileOutputStream("d:/123.txt")); ots.writeObject(new Student2("张三",22,"男"));//序列化 ots.close(); ObjectInputStream ois=new ObjectInputStream(new FileInputStream("d:/123.txt")); Student2 stu=(Student2)ois.readObject();//反序列化 ois.close(); System.out.println(stu);

对象流ObjectInputStream

1、           必须实现Serializable接口

2、           给类增加序列化编号,给类定义一个标记,新的修改后的类还可以操作曾经序列化的对象。

3、           静态是不能被序列化的,序列化只能对堆中的进行序列化。

4、           不需要序列化的字段前加transient

转载请注明原文地址: https://www.6miu.com/read-28006.html

最新回复(0)