目录

一、总体概览

二、FileInputStream与FileOutputStream

三、FileReader与FileWriter

四、BufferedInputStream与BufferedOutputStream

五、BufferedReader与BufferedWriter

六、InputStreamReader与OutputStreamWriter

七、ObjectInputStream与ObjectOutputStream

八、PrintStream与PrintWriter


一、总体概览

字节流与字符流分类如上,下面简要介绍各个流的使用方式,进行梳理方便日后查看。

二、FileInputStream与FileOutputStream

文件字节输入流FileInputStream

//文件输入流创建,与文件接通
InputStream is = new FileInputStream("IO\\src\\data.txt");//使用read方法读一个字节int b;while ((b=is.read())!=-1){System.out.println((char) b);
}//使用read方法读取字节数组
byte[] buffer = new byte[3];   //一次流几个字节
int len;
while ((len = is.read(buffer))!=-1) {  //读了几个字节,装进去String rs1 = new String(buffer,0,len);  //读多少,倒多少。适用小于等于3System.out.println(rs1);
}

文件字节输出流FileOutputStream

//文件输出流创建,与文件接通
OutputStream os = new FileOutputStream("IO\\src\\data5.txt");//先清空之前的,再写新数据
//OutputStream os1 = new FileOutputStream("IO\\src\\data5.txt",true);//不请空,追加//写一个字节进去
os.write('a');//写一字节数组进去
os.write("\r\n".getBytes());byte[] buffer = {'a',45};
os.write(buffer);byte[] buffer2 = "你好".getBytes();
os.write(buffer2);//写数据,一定要刷新
os.flush();//释放资源,其也包含刷新,流便无法再使用
os.close();

三、FileReader与FileWriter

文件字符输入流FileReader

//创建一字符输入管道与源文件接通
Reader fr = new FileReader("IO\\src\\data.txt");//字符数组读
char[] buffer = new char[1024]; //1K字符
int len;
while ((len=fr.read(buffer))!=-1){String s = new String(buffer,0,len);  //解码System.out.print(s);
}

文件字符输出流FileWriter

//创建一字符输出流与文件接通
Writer fw = new FileWriter("IO\\src\\data10.txt");
//Writer fw = new FileWriter("IO\\src\\data10.txt",true);//追加数据//写入字符
fw.write(98);
fw.write('a');fw.write("你好呀");fw.write("sad撒加快了",0,4);
fw.write("\r\n");fw.flush();
fw.close();//关闭包含刷新

四、BufferedInputStream与BufferedOutputStream

字节缓冲流自带8K缓冲区,使用时将原始字节流包装为缓冲流

字节缓冲输入流BufferedInputStream与字节缓冲输出流BufferedOutputStream

//创建字节输入缓冲流与字节输出缓冲流
try (InputStream is = new FileInputStream(new File("D:\\picture\\ori.jpg"));InputStream bis = new BufferedInputStream(is);//包装成高级管道OutputStream os = new FileOutputStream("D:\\picture\\copy.jpg");OutputStream bos = new BufferedOutputStream(os);//包装) {//定义一字节数组byte[] buffer = new byte[1024];int len;//读并写入while ((len = bis.read(buffer)) != -1) {bos.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();
}

五、BufferedReader与BufferedWriter

字符缓冲输入流BufferedReader

readLine()方法很nice

//创建流与文件接通
Reader is1 = new FileReader(new File("D:\\picture\\ori.jpg"));
BufferedReader bir1 = new BufferedReader(is1);//按行读取,一次读一行
String line;
while ((line= bir1.readLine())!=null){System.out.println(line);
}

字符缓冲输出流BufferedWriter

newLine()可以写入一空行

//创建流与文件接通
Writer w = new FileWriter("day24_buffer\\src\\data1");
BufferedWriter bw = new BufferedWriter(w);//写入
bw.write("你好");
bw.write(",");
//空一行
bw.newLine();
bw.write("旅行者");//关闭加刷新
bw.close()

六、InputStreamReader与OutputStreamWriter

字节流转字符流

字符输入转换流InputStreamReader:

public InputStreamReader(InputStream is ,String charset):可以把原始的字节流按照指定编码转换成字符输入流,这样字符流中的字符就不乱码了(重点)

字符输出转换流OutputStreamWriter:

public OutputStreamWriter(OutputStream os,String charset):可以把原始的字节输出流按照指定编码转换成字符输出流(重点)

七、ObjectInputStream与ObjectOutputStream

对象序列化:

作用:以内存为基准,把内存中的对象存储到磁盘文件中去,称为对象序列化。

使用到的流是对象字节输出流:ObjectOutputStream

方法:public final void writeObject(Object obj)  把对象写出去到对象序列化流的文件中去

对象序列化,对象需先继承Serializable这一接口

Student s1 = new Student("小明",45);//对象序列化
OutputStream os = new FileOutputStream("buffer\\src\\object.txt");
ObjectOutputStream oos = new ObjectOutputStream(os);//调用序列化方法
oos.writeObject(s1);oos.close();

对象反序列化:

使用到的流是对象字节输入流:ObjectInputStream

作用:以内存为基准,把存储到磁盘文件中去的对象数据恢复成内存中的对象,称为对象反序列化

方法:public Object readObject() 把存储到磁盘文件中去的对象数据恢复成内存中的对象返回

InputStream is = new FileInputStream("buffer\\src\\object.txt");
ObjectInputStream ois = new ObjectInputStream(is);Student s =(Student) ois.readObject();
System.out.println(s);

关键点:

1.对象序列化,对象需先继承Serializable这一接口

2.不想序列化的变量可加transien修饰

3.序列化版本化,反序列化版本化需要与序列化一致,更改该值可强制重新序列化

八、PrintStream与PrintWriter

作用:打印流可以实现方便、高效的打印数据到文件中去。打印流一般是指:PrintStream,PrintWriter两个类。

可以实现打印什么数据就是什么数据,例如打印整数97写出去就是97,打印boolean的true,写出去就是true。

PrintStream

//流与文件接通
PrintStream ps =new PrintStream(new FileOutputStream("buffer\\src\\data5.txt"));
PrintStream ps1 =new PrintStream("buffer\\src\\data5.txt");//直接通向文件//输出
ps.println(97);
ps.println('a');
ps.println(true);ps.close();

PrintWriter

Writer w = new FileWriter("day24_buffer\\src\\data5.txt");
PrintWriter pw = new PrintWriter(w);pw.print("你好");
pw.print("\r\n");
pw.print("旅行者");pw.close();

更改打印流

//原打印流,流向控制台
System.out.println("打赏");PrintStream ps = new PrintStream("buffer\\src\\log.txt");
//更改打印流,使其流向文件
System.setOut(ps);       System.out.println("基地");

字节流与字符流应用详解相关推荐

  1. 字节流与字符流的详解,文件流,数据流

    首先看一下File类的常用方法 •File类的对象不但可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录: •当创建一个文件对象后,就可以利用它来对文件或目录的属性进行操作 ...

  2. java.IO字节流和字符流详解

    IO流的分类 在学习字节流和字符流之前因该先学习IO流的分类,效果会更好 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Rea ...

  3. 字节流和字符流(详解)

    字节流和字符流      如果数据流中最小的数据单元是字节,那么称这种流为字节流:如果数据流中最小的数据单元是字符,那么称这种流为字符流.在Java的IO系统 中,java.io.InputStrea ...

  4. 字节流与字符流的区别详解

    字节流与字符流 先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入 ...

  5. Java 常用IO流(字节流和字符流)详解

    一,简介及分类 IO流用来处理设备之间的数据传输:JAVA对数据的操作是通过流的方式:JAVA用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流. 流按操作类型分为两种: 字节流 : 字节流 ...

  6. Java IO 字节流、字符流详解

    1. 字节流与字符流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接.类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流 ...

  7. Java字节流和字符流详解

    文章目录 IO概述 什么是IO IO的分类 IO的流向说明图解 顶级父类们 字节流 一切皆为字节 字节输出流[OutputStream] FileOutputStream类 构造方法 写出字节数据 数 ...

  8. Java字节流与字符流,断点续传实现分片下载、上传、合并

    文章目录 一:字节流和字符流详解 1.1 流的概念 1.2 流的分类 1.3 字节流,字符流区别与使用场景 1.3.1 区别 1.3.2 使用场景 1.3.3 顶级父类 1.3.4 对比--总结对比字 ...

  9. java中文字符怎么保证出现正确_JAVA中文字符编码问题详解

    JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资 ...

最新文章

  1. 为了OFFER,继续深入学习树和二叉树
  2. php文件上传指定路径,php上传文件到指定文件夹
  3. Git笔记(34) 调试
  4. java file 方法_JAVA中File的常用方法
  5. 【Oracle】数据库范式
  6. input 禁止输入特殊字符
  7. 什么是域名系统 (DNS)
  8. CocosCreator快速接入bugly
  9. JAVA学习day30--方法的重写
  10. 职场新人如何快速赚到自己的第一桶金?
  11. 零基础入门microbit教程
  12. vue-cli创建项目,webpack运行时在 95% emitting CompressionPlugin卡住不动
  13. GEE引擎自定义进度条和自定义属性的脚本展示
  14. sendto()_Linux C函数
  15. 蓝牙5.0跟蓝牙4.2的区别
  16. 我的世界服务器改无限跳跃,《我的世界》最新作弊码秘籍大全
  17. pcm5102a解码芯片音质评测_airpods超强平替,新品JEET ONE蓝牙耳机开箱评测!
  18. Group equivariant capsule networks(组等变胶囊网络) 论文翻译
  19. 【android:位置传感器——使用近程传感器】
  20. python工具栏消失_解决Jupyter notebook更换主题工具栏被隐藏及添加目

热门文章

  1. idea分支合并到主干
  2. OpenCV视频质量检测--清晰度检测
  3. QIIME 2 使用总结
  4. nodeJs处理json
  5. 计算机进程同步实验观察结果记录表,实验5 操作系统进程与文件管理 实验报告表 作业 5.doc...
  6. 失传万年的PS致富经典(九)
  7. mysql数据库中查看数据库当前连接数
  8. Linux 系统调用深思:从原理到实战
  9. Requests 和 Scrapy 添加动态IP代理
  10. matlab中的graythresh函数的实例