字符字节流

来源:互联网 发布:办公鼠标推荐 知乎 编辑:程序博客网 时间:2024/06/06 01:29

分类

字节输入流

字节输出流

字符输入流

字符输出流

抽象基类

InputStream

OutputStream

Reader

Writer

访问文件

FileInputStream

FileOutputStream

FileReader

 

访问数组

ByteArrayInputStream

 

CharArrayReader

 

访问管道

PipedInputStream

 

PipedReader

 

访问字符串

 

 

StringReader

 

缓冲流

BufferedInputStream

 

BufferedReader

 

转换流

 

 

InputStreamReader

 OutputStreamWriter

对象流

ObjectInputStream

 

 

 

抽象基类

FilterInputStream

 

FilterReader

 

打印流

 

PrintStream

 

 

推回输入流

PushbackInputStream

 

PushbackReader

 

特殊流

DataInputStream

 

 

 


结论:1、上面下划线的代表节点流,必须和指定的物理节点关联,抽象基类无法创建实例。

2、如果输入输出的是文本内容,则应该用字符流,如果是二进制的则应该使用字节流

3、字节流用byte[] bbur=new byte[]然后调用字节流进行封装read(bbuf);字符流则用char[] c=new char[32]数组进行封装

4、字节流可以通过InputStreamReader或OutputStreamWriter进行转换成相应的字符流

5、注意上面字节流虽然读取的是byte但是实际用read方法读入的是int类型,然后调用write方法的时候把int又转换成byte读取,OutputStream的write()方法参数可以是字节或者int,但往往write会截取8个二进制位(0-255),多余的位就抛弃。read的时候把byte强制转型为int,write的时候相反,主要是因为字节流如果读取的是byte的话那么八个字节如果是1111 1111的话表示-1,因为-1代表字节读取完全,所以会出错,假如向上转型为int则-1表示为0000.....(24个0)11111111,表示的是255,即读取的数据只能是0-255,不存在-1冲突的问题。

6、同样在字符流里面的char能表示0-65535,而int的数据宽度同样包含char,选取一个在不在char范围而又在int的范围表示文件结束(选了-1),所以read用int类型,然后-1的问题也可以很好的解决。


 

0 0
原创粉丝点击