JAVA.io包,输入输出流整理

java.io包中有很多输入输出流,特别是在节点流、处理流管道套接的时候,初学者容易弄错。最近看了马士兵老师的视频,为了梳理一下思维,把整理结果分享给大家。


流(Stream):JDK中通过流获取各种类型的数据。可以把流看成是一根管道,通过管道连接程序或数据源,从而获取我们想要的数据。

流分类:

补充:还有FilterInputStream/FileterOutPutStream , FilterReader/FilterWriter也是抽象类


什么是输入流,输出流?

针对我们的程序而言,往外部写数据,就是使用输出流; 从外部读取数据,就是使用输入流。

什么是字符流,字节流?

处理数据单位为字符,使用字符流;处理数据单位为字节,使用字节流。 为什么要这么划分呢?因为1个中文汉字为1个字符=2个字节,如果中文汉字按照字节处理,就存在读取或写入半个字符,显示为乱码。

什么是节点流,处理流?

按照前面我们所说,流就相当于建立在数据源和程序之间的管道,节点流就是一根直接连接程序和数据源的管道;处理流就是套接在节点流上面的管道。


所以需要注意的是处理流,一定是在套接在节点流上的,不能直接连接程序和数据源。 例如:BufferedReader brr = new BufferedReader(System.in);  这个是错误的,因为BufferedReader是一个处理流。


那IO包中常用的字节流,处理流有哪些呢?(大家查看API文档,通过查看类继承与Reader/Writer或InputStream/OutputStream可以区分出是字符流还是字节流)

下面列举一些常用的类

节点流

(对文件进行数据处理都要使用File相关类)

public class FileReader extends InputStreamReader 字符流
public class FileWriter extends OutputStreamWriter 字符流
public class FileInputStream extends InputStream 字节流
 
 
public class FileOutputStream extends OutputStream 字节流
 
 
 
 
 
 
 
 
 
 
 
 
public class ByteArrayInputStream extends InputStream 字节流
public class ByteArrayOutputStream extends OutputStream 字节流
 
 

处理流
public class InputStreamReader extends Reader  字符流
 
 
public class OutputStreamWriter extends Writer 字符流
public class BufferedInputStream extends FilterInputStream 字节流
public class BufferedOutputStream extends FilterOutputStream 字节流
public class BufferedReader extends Reader 字符流
public class BufferedWriter extends Writer 字符流
public class DataInputStream extends FilterInputStream implements DataInput 
public class DataOutputStream extends FilterOutputStream implements DataOutput
public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants
public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants





 
  
 




猜你喜欢

转载自blog.csdn.net/lanju2012/article/details/53727589