美文网首页
JAVA IO流相关内容总结

JAVA IO流相关内容总结

作者: 橘子炒年糕 | 来源:发表于2019-05-15 19:29 被阅读0次

最近刚看完b站上高淇老师的java300集教程,中间IO流那趴尤其云里雾里,前前后后看了几遍又对比了代码,IO流这部分的知识点差不多在脑子里也形成了一个体系,下面就总结一下教程中166到193讲的IO流部分的内容,就是我对这部分知识的理解。

首先IO流有三种分类:第一,输入流,输出流。这就很好理解,就是从程序的角度看,获得信息就是输入,给出信息就是输出;第二,字节流,字符流。字节流就是二进制的存储方式,可以处理一切文件,而字符流就只能处理纯文本;第三,节点流,处理流。节点流就是直接代表信息的源头,而处理流只能起到增强功能,所以必须包裹节点流才行。

IO流中有两个重要的抽象类,InputStream和OutputStream,他们是字节流,也就是用byte处理数据。一种具体实现有FileInputStream和FileOutputStream,这里的File代表着一个源头或目的地的意思,就是从文件读或写入文件。举个栗子:

// 从文件读取

File src = new File("e:/a.txt");

InputStream is = new FileInputStream(src);

byte[] flush = new byte[1024];

int len = 0;

while(len=is.read(flush)!=-1){

    String info = new String(flush, 0, len);

}

// 写入文件

OutputStream os = new FileOutputStream(f, true);

byte data = "some information".getBytes();

os.write(data);

os.flush();

os.close();

这里的FileInputStream和FileOutputStream是字节流,所以读取和写入都用了byte数组。另外,在读取时,采用了分段读取的方法,就是一部分一部分地读进flush中。

另外还有就是字符流,读纯文本的,Reader和Writer,实现类FileReader和FileWriter。具体方法找API吧,反正都是read write这种方法。

处理流,BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter。这些是要包在节点流外面的,起到一种提高性能的效果。还有另外一个处理流,转换流,起到解码,编码的作用,能字符流和字节流相互转换。InputStreamReader和OutputStreamWriter。

其他的一个节点流,ByteArrayInputStream和ByteArrayOutputStream。这里ByteArray和File那对的命名有一定区别,比如FileOutputStream是指输出到File上,而ByteArrayOutputStream是指把ByteArray写到OutputStream上,就是ByteArray是被操作的对象,而File是目的地,这里很容易搞晕。这个节点流和上面一样,用分段读取的方法来操作,举个栗子,分析这个题目,把文件中的一张图,写到byte数组中:从程序的角度看,首先我们要把图读到程序中,就是输入,从文件,那就是FileInputStream;接下来,把程序中的内容,写出去,就是输出,到byte数组,就是ByteArrayOutputStream,大致相关的代码如下,省略了异常还有声明等部分:

InputStream is = new FileInputStream(new File("..."));

OutputStream os = new ByteArrayOutputStream();

while(len=is.read(flush)!=-1){

    os.write(flush, 0, len);

}

os.flush();

return os.toByteArray();

还有两种处理流,DataInputStream, DataOutputStream和ObjectInputStream, ObjectOutputStream。对命名的理解和ByteArray是一样的,就是被操作的对象是什么类型。其中一个很重要的应用就是序列化反序列化。把object写到流中再读出来,深克隆就用了这个操作。因为这俩是处理流,所以需要包裹节点流。举一个序列化反序列化的例子,把object写到流中,即输出,用ObjectOutputStream,因为要包裹OutputStream,所以还要用到ByteArrayOutputStream;之后,把流中的object读到程序里,即输入,用ObjectInputStream,要包裹InputStream,所以还要用到ByteArrayInputStream。代码:

// 写到流中

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(baos);

oos.writeObject(obj);

// 从流中读

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

ObjectInputStream ois = new ObjectInputStream(bais);

return ois.readObject();

相关文章

  • JAVA IO流相关内容总结

    最近刚看完b站上高淇老师的java300集教程,中间IO流那趴尤其云里雾里,前前后后看了几遍又对比了代码,IO流这...

  • Java的IO & NIO

    IO流学习总结一Java IO,硬骨头也能变软二java IO体系的学习总结三Java IO面试题 NIO与AIO...

  • Java学习总结之Java IO系统(二)

    本文接着Java学习总结之Java IO系统(一),我们继续总结Java IO系统的相关知识。 字符流(Write...

  • Java之IO流详解

    title: Java之IO流详解tags: Java IO流categories: Java IO流 大多数应用...

  • Java IO 流总结

    本文对 Java 中的 IO 流的概念和操作进行了梳理总结,并给出了对中文乱码问题的解决方法。 1. 什么是流 J...

  • Java Io流(总结)

    引言 概念:"流"是一组有顺序的,有起点,有终点的字节集合.是对数据传输的总称或抽象概念."流"它既是数据在...

  • java IO流总结

    1. 流 流分为字节流和字符流. 1.1 字节流的基类 可以处理任何形式的文件. InputStream: 字节输...

  • Java IO流总结

    分类 明确要操作的数据是数据源还是数据目的(要读还是要写)源:InputStream Reader目的:Outpu...

  • Java学习Day17

    今日学习内容总结 字符流的输入及输出 Properties IO流 字符流 字符输入流【Reader】 java....

  • Java IO流的使用

    下面部分内容是参考Oubo的博客——Java IO流学习总结 Java流操作有关的类或者接口: 字符流和字节流 字...

网友评论

      本文标题:JAVA IO流相关内容总结

      本文链接:https://www.haomeiwen.com/subject/cqvmaqtx.html