InputStream、OutputStream、Reader和Writer的关系
来源:互联网 发布:人工智能机器人介绍 编辑:程序博客网 时间:2024/04/27 13:49
<a name="顶部"></a>InputStream:得到的是字节输入流,InputStream.read("filename")之后,得到字节流
Reader:读取的是字符流
InputStreamReader:从字节到字符的桥梁。InputStreamReader(InputStream.read("filename"));
reader.read(InputStreamReader(InputStream in));便可从字节变为字符,打印显示了。
java.io.Reader 和 java.io.InputStream 组成了Java 输入类。
Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
Reader支持16位的Unicode字符输出,
InputStream支持8位的字符输出。
Reader和InputStream分别是I/O库提供的两套平行独立的等级机构,
1Byte = 8bits
InputStream、OutputStream是用来处理8位元的流,
Reader、Writer是用来处理16位元的流。
而在JAVA语言中,byte类型是8位的,char类型是16位的,所以在处理中文的时候需要用Reader和Writer。
值得说明的是,在这两种等级机构下,还有一道桥梁InputStreamReader、OutputStreamWriter负责进行InputStream到Reader的适配和由OutputStream到Writer的适配。
在 Java中,有不同类型的 Reader 输入流对应于不同的数据源:
FileReader 用于从文件输入; CharArrayReader 用于从程序中的字符数组输入; StringReader 用于从程序中的字符串输入; PipedReader 用于读取从另一个线程中的 PipedWriter 写入管道的数据。
相应的也有不同类型的 InputStream 输入流对应于不同的数据源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。
另外,还有两种没有对应 Reader 类型的 InputStream 输入流: Socket 用于套接字; URLConnection 用于 URL 连接。 这两个类使用 getInputStream() 来读取数据。
相应的,java.io.Writer 和 java.io.OutputStream 也有类似的区别。
关于InputStream.read(byte[] b)和InputStream.read(byte[] b,int off,int len)这两个方法都是用来从流里读取多个字节的,有经验的程序员就会发现,这两个方法经常 读取不到自己想要读取的个数的字节。比如第一个方法,程序员往往希望程序能读取到b.length个字节,而实际情况是,系统往往读取不了这么多。仔细阅读Java的API说明就发现了,这个方法 并不保证能读取这么多个字节,它只能保证最多读取这么多个字节(最少1个)。因此,如果要让程序读取count个字节,最好用以下代码:
byte[] b = new byte[count];
int readCount = 0; // 已经成功读取的字节的个数
while (readCount < count) {
readCount += in.read(bytes, readCount, count - readCount);
}
用这段代码可以保证读取count个字节,除非中途遇到IO异常或者到了数据流的结尾(EOFException)
<a href="#顶部">回到顶部</a>
- InputStream、OutputStream、Reader和Writer的关系
- Java InputStream和OutputStream,Reader和Writer的辨析
- java OutputStream和InputStream Writer和Reader
- InputStream和Reader、 OutputStream和Writer
- OutputStream和InputStream,Writer和reader
- Reader/Writer与InputStream/OutputStream的区别
- InputStream & OutputStream V.S. Reader & Writer
- java中的InputStream、OutputStream以及Reader、Writer
- OutputStream、InputStream、Writer、Reader学习笔记
- 输入输出之InputStream&OutputStream、Reader&Writer
- JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介
- JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介
- JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介
- Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)
- Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)
- Java 输出流转输入流的方法(OutputStream转InputStream,Writer转Reader)
- Java IO 文件流的读,文件流写Writer,Reader,InputStream,OutputStream封装
- Java IO 文件流的读,文件流写Writer,Reader,InputStream,OutputStream封装
- PHP中对缓冲区的控制实现代码
- ListView小知识整理:滑动背景、Item间隙等
- 扩展文件权限ACL
- 马士兵 Java学习路线图
- Hadoop概述
- InputStream、OutputStream、Reader和Writer的关系
- 影响力 读书笔记
- Google IPs
- Sql 字符串 比较大小
- CF Permutations【排列组合+求和】
- 指针初始化为NULL的作用
- 同步与互斥
- Window.location.href 执行问题
- 回溯法——八皇后问题