【Java】IO体系

相关其他博客:
File类介绍
InputStream,OutputStream
Writer,Reader

IO采用的是 装饰者模式
在这里插入图片描述
字节流与字符流的区别

在这里插入图片描述

  1. 在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。
  2. 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
  3. 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

某些情况下,如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。

字节流:数据流中最小的数据单元是字节
字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。

按数据来源(去向)分类:

1、File(文件): FileInputStream, FileOutputStream, FileReader, FileWriter
2、byte[]:ByteArrayInputStream, ByteArrayOutputStream
3、Char[]: CharArrayReader,CharArrayWriter
4、String:StringBufferInputStream, StringReader, StringWriter
5、网络数据流:InputStream,OutputStream, Reader, Writer

输入字节流InputStream

InputStream是所有的输入字节流的父类,它是一个抽象类。

InputStream中的三个基本的读方法:

abstract int read() :读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了输入流的末尾。
intread(byte[]?b) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。
intread(byte[]?b, int?off, int?len) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。

流结束的判断:方法read()的返回值为-1时;readLine()的返回值为null时。

输出直接流OutputStream

OutputStream是所有的输出字节流的父类,它是一个抽象类。

outputStream中的三个基本的写方法:

abstract void write(int?b):往输出流中写入一个字节。
void write(byte[]?b) :往输出流中写入数组b中的所有字节。
void write(byte[]?b, int?off, int?len) :往输出流中写入数组b中从偏移量off开始的len个字节的数据。


字符输入流Reader

Reader是所有的输入字符流的父类,它是一个抽象类。

3个读方法:

public int read() throws IOException 读取一个字符,返回值为读取的字符
public int read(char cbuf[]) throws IOException 读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量
public abstract int read(char cbuf[],int off,int len) throws IOException 读取len个字符,从数组cbuf[]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现

字符输出流Writer

Writer是所有的输出字符流的父类,它是一个抽象类。

主要方法:

public void write(int c) throws IOException 将整型值c的低16位写入输出流
public void write(char cbuf[]) throws IOException 将字符数组cbuf[]写入输出流
public abstract void write(char cbuf[],int off,int len) throws IOException 将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流
public void write(String str) throws IOException 将字符串str中的字符写入输出流
public void write(String str,int off,int len) throws IOException 将字符串str 中从索引off开始处的len个字符写入输出流

在整个Java.io包中最重要的就是5个类和一个接口。
5个类指的是File、OutputStream、InputStream、Writer、Reader
一个接口指的是Serializable

发布了66 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ACofKing/article/details/90237347