javaSE中字符流字节流以及转换流的总结
来源:互联网 发布:免费收支软件 编辑:程序博客网 时间:2024/05/02 02:12
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[1024 *8]; //最好是1028的整数倍
int len= 0; // 已经成功读取的字节的个数,或者最后末尾的长度
while ((len = is.read(arr)!=-1) {
//TO-DO something,可以进行syso操作以及output操作等
}
//最后别忘记了关流,不然文件不完整,会有数据留在缓冲区,除非手动调用flush方法,否则进行文件拷贝的时候会因为缺少字节而失败
is.close();
//blog迁移自apkbus论坛:http://www.apkbus.com/blog-327389-58485.html
- javaSE中字符流字节流以及转换流的总结
- JavaSE---IO流(字节流、转换流、字符流)
- 字节字符转换流
- JavaSE中字节流与字符流在复制文件上的异同
- JavaSE总结-IO字节流总结
- Java中字节流和字符流之间的转换
- 字节流和字符流的转换
- 字符流与字节流的转换
- java中字节流和字符流的总结
- IO-字节、字符转换流
- Java 字节字符转换流
- java IO(File类、字节流与字符流、字节字符转换流) 总结
- JavaSE总结-IO字符流总结
- 字符流和字节流之间的转换以及输入输出,详细分析
- 字符留和字节流的总结
- javaSE(14)(字节流与字符流)
- JavaSE 学习参考:字节流和字符流转换
- java中字符跟字节转换 总结
- 科大讯飞软件测试一面问题
- Android动画相关知识储备
- opencv中的FileStorage类使用注意事项
- 有关Fragment的getActivity().findViewById,以及inflate与 findViewById 区别、setContentView和inflate的区别!!!
- Java使用DOMparser来解析XML的用例
- javaSE中字符流字节流以及转换流的总结
- 【坑爹】2016.10.13LOI日常考试 T1(状压BFS) Maze2[迷宫]+状态压缩基础知识
- hadoop学习之MongoDB增删改查Java实现
- APP三种开发模式
- Python删除某一目录下的空文件(夹)
- 代码草稿
- 求一个字符串中出现另一子字符串的次数
- 数据结构作业保存2-2双向循坏列表的建立,删除,插入,移动
- Java字符串算数表达式求值