[Java] JAVA IO操作
简介
一个优秀的程序必然离不开IO操作,不论是读写网络数据还是本地文件,都必须有扎实的IO操作技巧。
核心内容: 1.字节流、字符流的区别。 2.缓冲流的使用。 3.随机文件读写。
手机用户请
横屏
获取最佳阅读体验,REFERENCES
中是本文参考的链接,如需要链接和更多资源,可以关注其他博客发布地址。
平台 | 地址 |
---|---|
CSDN | https://blog.csdn.net/sinat_28690417 |
简书 | https://www.jianshu.com/u/3032cc862300 |
个人博客 | https://zacsnz.github.io/NoteBooks/ |
正文
Java IO操作
IO 简介
- 含义
IO也写作“I/O”,可理解为In和Out,即输入与输出。 所以IO体系的基本功能就是:读和写。
- IO流:
作用:读写设备上的数据,硬盘文件、内存、键盘、网络...
- 分类
根据数据的走向,可分为:输入流、输出流 根据处理的数据类型,可分为:字节流、字符流
- 区别
字节流: 可以处理所有类型的数据,如MP3、图片、文字、视频等。在读取时,读到一个字节就返回一字节。
字符流:仅能处理纯文本数据,如txt文本等。在读取时,读到一个或多个字节,先查找指定的编码表,然后将查到的字符返回。
在Java中对应的类都是以「Reader」、[Writer]结尾
IO 中字符、字节和编码的区别和联系
- 字节(Byte)
字节是通过网络传输信息或在硬盘或内存中存储信息的单位,是算机信息技术用于计量存诸容量和传输容量的一种计量单位。 1个字节等于8位二进制, 即一个8位的二进制数,是一个很具体的存储空间。 如0x01, 0x45, OxFA,…
- 字符(Char)
字符是人们使用的记号,抽象意义上的一个符号。
如]
、中
、a
、$
、1
等等。
- 字符集(Charset)
字符集
也称作编码
,各个国家和地区所制定的不同ANSI编码标准中,都只规定了各自语言所需"字符"。 比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些ANSI编码标准所规定的内容包含两层含义: 各个国家和地区在制定编码标准的时候, “字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集" ,比如: GB2312, GBK, JIS等,除了有字符的集合
这层含义外,同时也包含了编码
的含义。- 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
- 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。
- ANSI 字符串在内存中,如果“字符”是以ANSI编码形式存在的,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串为ANSI字符串或者多字节字符串。不同ANSI编码所规定的标准是不相同的,因此,对于一个给定的多字节字符串,我们必须知道它采用的是哪一种编码规则,才能够知道它包含了哪些"字符”
- UNICODE
字符串在内存中,如果
字符
是以在UNICODE中的序号存在的,那么我们称这种字符串为UNICODE字符串或者宽字节字符串。对于UNICODE字符串来说,不管在什么环境下,它所代表的字符
内容总是不变的。用来给UNICODE字符集编码的标准有很多种, 比如: UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig等。
Tips:
对于任何数据,都可以通过字节流来操作。 对于文本数据,如果利用字符流操作,需要指定相应的编码规则。
使用字节流读写数据
字节流读取数据
字节流写数据
利用中间数据时间字节流数据的拷贝
使用带缓冲的字节流读写数据
读取数据
写入数据 & 拷贝数据
修改缓冲区大小
Tips:
缓冲区过大和过小都不好,需要根据文件大小动态调整。
使用字符流读写数据
读取数据
写入数据 & 拷贝数据(文本文件)
FileReader与FileWriter
读写文件
RandomAccessFile随机文件读写
- 构造随机读写任务执行类
- 多线程随机读写
Tips:
每个线程任务根据区块下标进行偏移写入。
使用Apache IO库操作IO与文件
功能十分强大,具体参考Apache IO 官方API。
JDK UML
REFERENCES
- 极客视频:Java中的IO操作
- JDK8 官方API
- Apache Commons IO API
链接文本
- JDK8 官方API
https://docs.oracle.com/javase/8/docs/api/
- Apache Commons IO API
https://commons.apache.org/proper/commons-io/javadocs/api-release/index.html
本文素材来源于https://www.jikexueyuan.com/course/215_9.html?ss=1