IO流笔记常用字节流字符流的使用
时间:2021-08-23
本文章向大家介绍IO流笔记常用字节流字符流的使用,主要包括IO流笔记常用字节流字符流的使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
IO:Input Output
流的概念和作用
流是一组顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象,即数据在两设备间传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
IO流的分类
- 根据 处理的数据类型不同可以分为:字符流和字节流
- 根据数据的流向可以分为:输入流和输出流
什么情况下使用字符流:如果读写的都是字符数据,这时候我们就使用字符流。文本文件。
什么情况使用字节流: 读取到数据不需要经过编码或者解码的情况情况下这时候使用字节流。比如:图片数据、视频数据字符流 = 字节流 + 编码(解码)
字符流和字节流字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:- 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。- 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
FileRead 和 FileWriter
@Test
public void testFileReader(){
FileReader fileReader = null;
try {
// fileReader = new FileReader("IO.txt");// 查找当前文件目录下的
fileReader = new FileReader("E:\\IDEAWorkspace\\JavaStudy\\JavaSE\\src\\IOTest\\IO.txt"); // 等于上面那个
// int ch = fileReader.read(); // 读取第一个字符
// System.out.println(ch);
// System.out.println((char)ch);*/
// // 一个一个字符的读
// int ch = -1;
// while ((ch = fileReader.read()) != -1){
// System.out.println(ch);
// System.out.println((char)ch);
// }
char[] buffer = new char[5];
int length = -1;
// 将读取的数据存放在buffer中,返回读取的长度,当取完之后返回的是-1
while ((length = fileReader.read(buffer)) != -1){
System.out.println(Arrays.toString(buffer));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null){
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
InputStream 和 OutputStream
@Test
public void testInputOutputStream(){
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream("E:\\IDEAWorkspace\\JavaStudy\\JavaSE\\src\\IOTest\\bd.png");
// fileInputStream = new FileInputStream("IOTest\\bd.png");
fileOutputStream = new FileOutputStream("E:\\IDEAWorkspace\\JavaStudy\\JavaSE\\src\\IOTest\\bd_back.png");
byte[] buffer = new byte[1024];
int length = -1;
while((length = fileInputStream.read()) != -1) {
fileOutputStream.write(buffer, 0, length);
}
System.out.println("success");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileInputStream != null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutputStream != null){
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ObjectInputStram 和 ObjectOutputStream
import day12.Student;
import org.junit.Test;
import java.io.*;
public class ObjectIODemo {
@Test
public void testObjectOutputStream(){
Student student = new Student(1,"zhangsan",18,"男");
ObjectOutput objectOutput = null; // 负责对象转换
FileOutputStream fileOutputStream = null;// 真正写文件的还是fileOutputStream
try {
fileOutputStream = new FileOutputStream("student");
objectOutput = new ObjectOutputStream(fileOutputStream);
objectOutput.writeObject(student);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (objectOutput != null){
try {
objectOutput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutputStream != null){
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void testObjectInputStream(){
FileInputStream fileInputStream = null;
ObjectInput objectInput = null;
try {
fileInputStream = new FileInputStream("student");
objectInput = new ObjectInputStream(fileInputStream);
Student student = (Student) objectInput.readObject();
System.out.println(student);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (fileInputStream != null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (objectInput != null){
try {
objectInput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
原文地址:https://www.cnblogs.com/sharpenblogs/p/15177408.html
- VList data structures in C#
- 编程思想 之「语言导论」
- 编程思想 之「对象漫谈」
- Github 项目推荐 | TensorFlow 概率推理工具集 —— probability
- Github 项目推荐 | 用于 C/C++、Java、Matlab/Octave 的特征选择工具箱
- Mercari Price 比赛分享 —— 语言不仅是算法和公式而已
- Github 项目推荐 | GAN 的 Keras 实现案例集合 —— Keras-GAN
- Github 项目推荐 | 微软开源 MMdnn,模型可在多框架间转换
- 半自动化运维之动态添加数据文件(一) (r5笔记第55天)
- 半自动化运维之动态添加数据文件(二) (r5笔记第56天)
- 11g Active DataGuard初探(r5笔记第54天)
- Github 项目推荐 | 用于构建端对端对话系统和训练聊天机器人的开源库 —— DeepPavlov
- 我身边的一些数据库事故 (r5笔记第52天)
- 一个清理脚本的改进思路(r5笔记第51天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 尝鲜使用微众银行WeCross实现基于哈希时间锁定的跨链转账
- Flutter 富文本第三方库 rich_text_widget
- 程序员的数学:线性代数之可视化
- 基于七牛SDK构建的Vue单页图片管理应用
- [Electron]仿写一个课堂随机点名小项目
- SyntaxError: (unicode error) 错误解决
- 理解CSS布局和块格式化上下文
- 基于后端云的吉他谱小程序开发
- 10个酷炫CMD命令
- Hog图像特征提取算法,HOG
- Win10设置Python定时任务
- 在 istio 中使用 namespace 进行资源/租户隔离
- 跨域(CORS)产生原因分析与解决方案,这一次彻底搞懂它
- 一文讲清楚动物模型中的母体效应
- storm安装教程