[Java] JAVA IO操作

2020-02-25 18:02:12 浏览数 (1)

[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等,除了有字符的集合这层含义外,同时也包含了编码的含义。
    1. 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
    2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。
  • 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

链接文本

代码语言:javascript复制
 - 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


0 人点赞