Java I/O 小结
主要内容:

一.输入流基类:InputStream 和 OutputStream(字节流)、 Reader 和 Writer(字符流)
二.文件字节流:FileInputStream和FileOutputStream
三.转换流(字节流-->字符流):InputStreamReader 和 OutputStreamWriter、FileReader 和 FileWriter
四.缓冲流:BufferedInputStream、BufferedOutputStream 和 BufferedReader、BufferedWriter
(以下内容等待更新……)
五.数据流:DataInputStream 和 DataOutputStream
六.标准输入输出流: System.in 和 System.out
七.对象流:ObjectInputStream和OjbectOutputSteam
一.输入流基类:InputStream 和 OutputStream(字节流)、 Reader 和 Writer(字符流)
在Java中,所有的I/O类都来源于这四个抽象类,其中InputStream 和 OutputStream为字节流输入输出(二进制I/O),Reader和Writer为字符流输入输出(文本I/O)。

二.文件字节流:FileInputStream和FileOutputStream
可知,文件中的内容由最基本的字节组成。如果我们要获取里面的内容,首先就要以字节的形式去获取:



三.转换流(字节流-->字符流):InputStreamReader 和 OutputStreamWriter、FileReader 和 FileWriter
首先要明白两个概念,编码与编码格式:
1.Unicode是一种“编码”,所谓编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射而已,可以理解成一个很大的对应表格。
2.GBK、UTF-8是一种“编码格式”,是用来序列化或存储1中提到的那个“编号(数字)”的一种“格式”;GBK和UTF-8都是用来序列化或存储Unicode编码的数据的,但是分别是2种不同的格式。
3.在内存中,即在Java虚拟机上,字符是有“编码”而没有“编码格式”的,其“编码”为Unicode。相反,在磁盘,即文件上,字符是没有“编码”但有“编码格式”的,为“UTF-8”或“GBK”等。
(以上内容来自:java中的编码和编码格式问题)
所以,磁盘中的内容是经过了“UTF-8”或“GBK”的编码的,为了从磁盘中读取这些内容:
1)先利用FileInputStream读出字节流,
2)然后再根据编码格式利用InputStreamReader进行解码,最后得到Unicode。
这样Java就能够识别是哪个字符了(123.txt的编码格式是utf-8)。


对于FileReader 和 FileWriter,他们是InputStreamReader 和 OutputStreamWriter的封装,根据系统默认字符集进行解码,但这不一定文件的编码相匹配,具有一定的盲目性。
四.缓冲流:BufferedInputStream、BufferedOutputStream 和 BufferedReader、BufferedWriter
在频繁的读写文件时,缓冲流能提高效率:

Java I/O 小结的更多相关文章
- java并发包小结(二)
接上一篇 java并发包小结(一):http://blog.csdn.net/aalansehaiyang52/article/details/8877579 Future 接口Future 接口允许 ...
- java IO 流小结
java IO 流小结 java流类图结构 流的分类 按方向 输入流 输出流 按类型 字节流 字符流 结论:只要是处理纯文本数据,就优先考虑使用字符流. 除此之外都使用字节流.
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- Java调用存储过程小结
学生在学习jdbc的时候,会问到怎么调用存储过程,现在将java调用oracle存储过程的示例总结如下.(关于调用sqlserver的存储过程将在下次进行小结请关注) 一:无返回值的存储过程 存储过程 ...
- 性能测试工具LoadRunner13-LR之Virtual User Generator 创建java脚本以及小结
Java vuser是自定义的java虚拟脚本,脚本中可以使用标准的java语言. 环境配置 1.安装jdk(注意:lr11最高支持1.6) 2.配置环境变量 3.在lr选择java Vuser协议 ...
- java第二周小结
这是接触Java的第一周,了解这个语言的一些基础知识,下面是对这段时间重要知识点的汇总 一.Java是一种面向对象的语言 特点为:简洁高效.可移植性.适合分布式计算.健壮防患于未然的特性.多线程 ...
- 读《深入理解java虚拟机》小结
之所以学习 jvm ,是因为在学习多线程相关知识时,对 volatile 关键字理解的不够透彻,总有种似懂非懂的感觉.于是通过在网上各种资料的查阅,最终将 volatile 和 jvm 联系上了,本身 ...
- java单向加密算法小结(1)--Base64算法
从这一篇起整理一下常见的加密算法以及在java中使用的demo,首先从最简单的开始. 简单了解 Base64严格来说并不是一种加密算法,而是一种编码/解码的实现方式. 我们都知道,数据在计算机网络之间 ...
- java Http编程小结
1:什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以reque ...
- Java: IO 学习小结
源: 键盘 System.in 硬盘 FileStream 内存 ArrayStream 目的: 控制台 System.out 硬盘 FileStream 内存 ArrayStream 处理大文件或者 ...
随机推荐
- ios -过滤字符串特殊字符
//过滤 " [ ] " + (NSString *)onTwoCommseparatedWithString:(NSString *)string { //过滤 " [ ...
- modelform 对象和model之间的关系
一.modelform的每一个标签对象 for bound_field in form: print('form.model',form.Meta.model) ...
- 10道mysql查询语句面试题
1.https://www.yanxurui.cc/posts/mysql/10-sql-interview-questions/ 2.http://mm.fancymore.com/reading/ ...
- 安装使用yarn,使用国内镜像加速npm和yarn
安装yarn https://yarnpkg.com/lang/zh-hans/docs/install/ 使用国内镜像加速npm和yarn 1. npm config set registry=ht ...
- jetty;linux 目录结构
[说明]今天看了看jetty这个web容器,上午看基础理论框架知识(后面半点没用到),下午下载了jetty,并且在上面部署了一个war应用,晚上在做eclipses整合jetty的时候出现了问题,下载 ...
- 【BZOJ4771】七彩树 主席树+树链的并
[BZOJ4771]七彩树 Description 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i]=c[j], ...
- Java工程师面试题整理[社招篇]
http://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面?2.访问修饰符public,private,protect ...
- Dictionary——通过value找Key
Dictionary<string, string> dic = GetRoleDescriptions(); string key = dic.FirstOrDefault(x => ...
- 巨蟒python全栈开发django2:初识django
今日内容大纲: 1.起飞版web框架 2.自定制框架的流程 3.jinja2模板渲染初识 4.MVC&&MTV 5.django版本介绍及django安装 6.django初识(一些操 ...
- <2013 07 29> 游泳
7月12日,在巴塞罗那的海滩学会用狗刨式游泳. 7月14日,在尼斯-戛纳海滩继续练习,稍式蛙泳仰泳. 7月28日,在慕尼黑某湖边吃烧烤,下湖练习. 7月29日,在慕尼黑奥林匹克游泳馆学会了仰泳,稍试自 ...