Java中的IO学习留存

基础概念

位,字节,字符三者之间的区别.

位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数。

字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写 B 来表示,1B(byte,字节)= 8bit(位)

字符:是指计算机中使用的字母、数字、字和符号

ASCIIS码: 1个英文字母(不分大小写)= 1个字节的空间

                    1个中文汉字 = 2个字节的空间

                    1个ASCII码 = 一个字节

UTF-8编码:1个英文字符 = 1个字节

                     英文标点  = 1个字节

                     1个中文 = 3个字节

                     中文标点 = 3个字节

Unicode编码:1个英文字符 = 2个字节

                     英文标点  = 2个字节

                     1个中文 = 2个字节

                     中文标点 = 2个字节
# 有错误的话,请指出

Java中的IO流

Java中的IO流包含两种输入输出流,每种又分为字节流和字符流两大类.主要类如下

  1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。

  2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。

  3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。

4.Reader(文件格式操作):抽象类,基于字符的输入操作。

  1. Writer(文件格式操作):抽象类,基于字符的输出操作。

  2. RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。

流的概念和作用

流:有能力产出数据的数据源对象或者是有能力接收数据的接收端对象

流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作

InputStream中的基本方法

//读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了输入流的末尾。
int read() 
//将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。
int read(byte[] b) 
//将数据读入一个字节数组,同时返回实际读取的字节数。如果返	 回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。
int read(byte[]?b, int off, int len) 

流结束的判断:方法read()的返回值为-1时;readLine()的返回值为null时。
OutputStream

void write(int b):往输出流中写入一个字节。
void write(byte[] b) :往输出流中写入数组b中的所有字节。
void write(byte[] b, int off, int len) :往输出流中写入数组b中从偏移量off开始的len个字节的数据。
void flush() :刷新输出流,强制缓冲区中的输出字节被写出。

Reader和Writer类似于上面

字符流和字节流的转换

InputStreamReader:字节到字符的桥梁

OutputStreamWriter:字符到字节的桥梁

OutputStreamWriter(OutStreamout):将字节流以字符流输出。

InputStreamReader(InputStream in):将字节流以字符流输入。

区别

字节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。

读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。

原理:byte[]和String之间的互相转换

//在从字节流转化为字符流时:实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)

//有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang

//而在字符流转化为字节流时,实际上是String转化为byte[]时,
byte[]   String.getBytes(String charsetName)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值