InputStream、InputStreamReader和Reader的关系
来源:互联网 发布:规模以上 知乎 编辑:程序博客网 时间:2024/03/28 19:03
转载网址:http://www.cnblogs.com/sara-gcj/p/3307454.html
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)
- InputStream、InputStreamReader和Reader的关系
- InputStream、InputStreamReader和Reader的关系
- InputStream、InputStreamReader和Reader的关系
- InputStream、InputStreamReader和Reader的关系
- java基础——InputStream、InputStreamReader和Reader的关系
- InputStream,InputStreamReader和Reader之间的区别与关系
- InputStream和Reader(BufferedReader、InputStreamReader 、FileReader )的区别
- InputStream、OutputStream、Reader和Writer的关系
- InputStreamReader 和FileReader的区别及InputStream和Reader的区别
- InputStreamReader 和FileReader的区别及InputStream和Reader的区别
- InputStream和Reader的区别
- InputStream和Reader的区别
- Reader和InputStream的区别
- InputStream和Reader的区别
- InputStream和Reader的区别
- InputStream和Reader的区别
- InputStream和Reader的区别
- InputStream和Reader的区别
- tomcat deploy path
- 《linux从入门到精通》刘忆智 (我再次说, 这类书,入门是可以的, 精通则完全是忽悠骗人的)
- [十天学会Linux Shell]第一天:小试牛刀
- 第三章第六题
- 7.3 MaxDoubleSliceSum
- InputStream、InputStreamReader和Reader的关系
- JAVA守护线程与用户线程的区别
- eclipse或myeclipse,web项目无法自动编译,.classpath文件原因造成的
- 一天一点MFC
- fzu2188 过河I BFS+剪枝
- Leetcode 199: Binary Tree Right Side View
- 数据库学习之事务控制
- java常用类
- VTKData-6.2.0的使用方法