标签:字符 字节 码表 写入 IO byte public
一、 IO
1.1 简介
1.IO 用于设备之间传输数据以及交互数据 I=>Input 输入 O==>Output 输出
2.使用场景:
A.读写文件的内容
B.用于上传与下载文件
C.即时通讯中聊天传输数据(qq 微信)
3.分类:
按照功能划分:字节流与字符流
按照流向划分:输入流与输出流
4.解释输入流与输出流
5.字节流
A.万物皆字节 硬盘中的任何的数据都可以使用字节来进行表示
B.字节流一般用于来读写音频与视频
C.字节流分类: 字节输入流与字节输出流
6.字符流
A.字符流=字节流+编码表 字符流底层也是使用字节流来进行操作 只是将字节通过编码表转换为字符
B.字符流一般用于操作纯字符的文件
C.字符流分类:字符输入流与字符输出流
7.IO 流使用的注意点
A.在使用IO流资源的时候 需要处理一些异常 异常处理方法:a.捕获 b.抛出
B.IO流资源使用完之后 一定要关闭资源 IO流资源比较消耗内存 建议在finally中进行关闭
C.IO中的流资源都是使用java.io下包资源
1.2 OutputStream
1.2.1 简介
A.此抽象类
B.表示输出字节流的所有类的超类
C.子类
1.2.2 常用方法
方法名称 |
方法描述 |
public void close() |
关闭流资源 |
public void flush() |
刷新(将缓冲区的数据刷新到硬盘中) |
public void write(byte[] b) |
一次写入多个字节 |
public abstract void write(int b) |
一次写入一个字节 |
public void write(byte[] b, int off, int len) |
一次写入数组中指定长度的字节 |
1.3 FileOutputStream
1.3.1 简介
A.文件输出流是用于将数据写入 File
B.FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter
1.3.2 构造方法
方法名称 |
方法描述 |
public FileOutputStream(File file) |
创建一个向指定 File 对象表示的文件中写入数据的文件输出流 |
public FileOutputStream(File file,boolean append) |
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处 |
public FileOutputStream(String name) |
创建一个向具有指定名称的文件中写入数据的输出文件流 |
public FileOutputStream(String name, boolean append) |
创建一个向具有指定 name 的文件中写入数据的输出文件流 |
1.3.3 构造方法三件事
A.实例化FileOutputStream
B.创建一个空的文件
C.将FileOutputStream指向这个空的文件
1.3.4 使用的步骤
A.实例化FileOutputStream
B.调用写的方法
C.关闭资源
1.4.1 简介
A.此抽象类
B.表示字节输入流的所有类的超类
C.子类
1.4.2 常用方法
方法名称 |
方法描述 |
public void close() |
关闭流资源 |
public abstract int read() |
一个一个字节读取 |
public int read(byte[] b) |
一次读取多个字节放入到缓冲区数组中 |
public int read(byte[] b, int off, int len) |
一次读取指定字节放入到缓冲区数组中 |
1.5.1 简介
A.FileInputStream 用于读取诸如图像数据之类的原始字节流。
B.要读取字符流,请考虑使用 FileReader
1.5.2 构造方法
方法名称 |
方法描述 |
public FileInputStream(File file) |
通过打开一个到实际文件的连接来创建一个 FileInputStream |
public FileInputStream(String name) |
通过打开一个到实际文件的连接来创建一个 FileInputStream |
1.5.3 构造方法两件事
A.实例化FileInputStream
B.将FileInputStream 指向需要操作的文件
1.5.4 使用步骤
A.实例化FileInputStream
B.调用读的方法
C.关闭资源
1.5.5 read()与 read(b)
A.read() 表示一个一个字节读取(效率低) read(b) 一次读取多个字节(效率高)
B.read() 返回的是读取的内容 read(b) 返回读取有效的字节个数
1.6 高效流
1.6.1 简介
1.高效写
A.BufferedOutputStream 该类实现缓冲的输出流
B.底层有一个缓冲区的数组 数组长度是8192
2.高效读
A.BufferedInputStream 高效读
B.底层有一个缓冲区的数组 数组长度是8192
3.高效读与高效写 本身没有读写的功能 只能对OutputStream与InputStream的封装
4.高效原因:
高效读 一次读取8192个字节的内容存入的缓冲区数组 数组是存在内存中
每次读取数据的都是从内存中读取数据 避免与磁盘进行多次交互 所有效率高
高效写同理
1.6.2 构造方法
构造方法名称 |
构造方法描述 |
public BufferedOutputStream(OutputStream out) |
创建一个新的缓冲输出流,以将数据写入指定的底层输出流 |
public BufferedInputStream(InputStream in) |
创建一个 BufferedInputStream 并保存其参数,即输入流 in |
1.7 关闭资源
1.在finally中关闭资源
2.在关闭资源的时候 一定要进行非空判断
3.关闭资源从下往上进行关闭资源
1.7 字符流
1.7.1 简介
1.概念:用于操作(读写)字符
2.分类:
A.字符输入流
B.字符输出流
3.使用字符流原因
使用字节流来操作字符的时候 可能会产生乱码 使用字节流操作纯字符比较麻烦 需要使用字符流
字符流=字节流+编码表
4.在所有的编码表中 中文的第一个字节都是负数
1.7.2 常用的编码表
1.ASCII码表
A.主要是包含西方国家使用的字符
B.范围:0-127
C.所有的码表的0-127的范围 都是遵循ASCII码表规则
D. 97 == 'a' 65 ==> 'A' 48 ==>'0'
2.GBK码表
A.GBK码表是可以包含中文的字符 一般在港澳地区使用
B.GBK码表中一个中文占两个字节
C.记事本默认的码表是GB2312 GBK是GB2312延伸的一种码表
D.记事本 eclipse(开发工具)
3.UTF-8码表
A.大部分公司使用的编码表就是UTF-8
B.在UTF-8码表中 一个中文是占三个字节
C.idea中默认的码表就是UTF-8
4.Unicode码表
A.Unicode码表被称为是万国码表 一般用于国际的交流
B.范围:0-65535
C.参考网站:http://www.jsons.cn/unicode/
1.7.3 字符串编解码
编码:字符转换为字节数组
解码: 将字节数组转换为字符串
方法名称 |
方法描述 |
public byte[] getBytes() |
使用平台的默认字符集(编码表)将此 String 编码为 byte 序列 |
public String(byte[] bytes) |
通过使用平台的默认字符集解码指定的 byte 数组 |
public byte[] getBytes(String charsetName) |
使用指定的字符集将此 String 编码为 byte 序列 |
public String(byte[] bytes, String charsetName) |
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String |
标签:字符,
字节,
码表,
写入,
IO,
byte,
public
From: https://www.cnblogs.com/wyzel/p/16803683.html