Java高效输入输出流讲解

Java中执行输出和输入操作,需要通过IO流。例如最常见的System.out.println()就是一个输出流。IO流的类比较多,但核心体系就是由File、 InputStream 、OutputStream、Reader、Writer和Serializable(接口)组成的。

I/O流基础概念

按照流的方向分为输入流(InputStream)与输出流(OuputStream):

  • 输入流:只能读取数据,不能写入数据。
  • 输出流:只能写入数据,不能读取数据。

因为程序是运行在内存中,以内存角度来理解输入输出概念,如下:

可以看到输入与输出是一个相对概念,数据写入文件,对于程序来说是输出流,对文件来说是输入流。但一般是以程序作为中心,所以从程序写入数据到其他位置,则是输出流,将数据读入程序中则是输入流。

简单的说就是:读取数据就是输入流,写入数据就是输出流。

按照处理的数据单位分为字节流和字符流

  •  字节流:操作的数据单元是8位的字节。InputStream、OutputStream作为抽象基类。
  •  字符流:操作的数据单元是字符。以Writer、Reader作为抽象基类。
  •  字节流可以处理所有数据文件,若处理的是纯文本数据,建议使用字符流。

IO流中的三类数据源

  • 基于磁盘文件:FileInputStream、FileOutputSteam、FileReader、FileWriter
  • 基于内存:ByteArrayInputStream ByteArrayOutputStream(ps:字节数组都是在内存中产生)
  • 基于网络:SocketInputStream、SocketOutputStream(ps:网络通信时传输数据)

根据流的作用可分为节点流和处理流

  • 节点流:程序直接与数据源连接,和实际的输入/输出节点连接;
  • 处理流:对节点流进行包装,扩展原来的功能,由处理流执行IO操作。

处理流的作用和分类

  • 处理流可以隐藏底层设备上节点流的差异,无需关心数据源的来源,程序只需要通过处理流执行IO操作。处理流以节点流作为构造参数。通常情况下,推荐使用处理流来完成IO操作。
  • 缓冲流:提供一个缓冲区,能够提高输入/输出的执行效率,减少同节点的频繁操作。例如:BufferedInputStream/BufferedOutputStream、BufferedReader/BufferWriter
  • 转换流:将字节流转成字符流。字节流使用范围广,但字符流更方便。例如一个字节流的数据源是纯文本,转成字符流来处理会更好。InputStreamReader/OutputStreamWriter
  1. 打印输出流:打印输出指定内容,根据构造参数中的节点流来决定输出到何处。
  2. PrintStream :打印输出字节数据。
    PrintWriter : 打印输出文本数据。 

字节流:

  • InputStream (抽象类):

   输入:           节点流:   System.in

处理流:   BufferedInputStream(    InputStreamReader( Inputstream in )  );

  • OutputSream(抽象类)

输出:           节点流:    System.out

处理流:   BufferedOutputStream(   OnputStreamReader( Outputstream out)     )

 字符流:

  • Reader (抽象类):

   输入:           节点流:   InputStreamReader( Inputstream in )

处理流:   BufferedInputStream(    InputStreamReader( Inputstream in )  );

  • Writer(抽象类)

输出:           节点流:     OutputStreamReader( Onputstream out)

处理流:   BufferedOnputStream(   OnputStreamReader( Outputstream out)     )

字符流:读写文件:

java.io.PrintWriter是java中很常见的一个类,该类可用来创建一个文件并向文本文件写入数据。

可以理解为java中的文件输出,java中的文件输入则是java.io.File。

2.常用的构造方法:

构造方法参数为String类型的对象,值应为文件全路径。若文件不存在,则会先创建文件。

public PrintWriter(String fileName) throws FileNotFoundException {this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))),false);}
package Demo;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;public class Test { private  File f = new File("C:\\a.txt");public static void main(String[] args) throws IOException {// 定义文件路径//字符流读取的方法Test test=new Test();//将字符串输入到文件中test.getReader();//读取相对应的字符串String str=test.writeInFile();//将文件中内容在控制台输出System.out.println("文件内容为:"+str);InputStreamReader  in = new InputStreamReader( System.in );BufferedInputStreamReader b = new BufferedInputStream( System.in );}//字符流写入方法public  void getReader(){try {//其中true表示在原本文件内容的尾部添加,若不写则表示清空文件后再添加内容PrintWriter pw=new PrintWriter(new FileWriter(f,true));pw.write("我是文件内容");pw.close();} catch (IOException e) {e.printStackTrace();}}public String writeInFile() throws IOException{String str = "";String count = "";try {// 使用字符流对文件进行读取BufferedReader bf = new BufferedReader(new FileReader(f));while (true) {//读取每一行数据并将其赋值给strif ((count = bf.readLine()) != null) {str += count;} else {break;}}// 关闭流bf.close();} catch (FileNotFoundException e) {e.printStackTrace();}return str;}
}

Java高效输入输出流讲解相关推荐

  1. Java之输入输出流(文件的读写)

    Java之输入输出流(文件的读写) 首先,在编程的世界,流明显显得很重要.C++的输入输出流,Java的输入输出流等等. 首先我们得学会如何使用Java的输入输出流.首先,它们被封装在Java的一个叫 ...

  2. java回忆录—输入输出流详细讲解(入门经典)

    今天我们开始进入学习 java 中比较让人头疼的事, 那就是 I/O 流.多线程.网络编程.这里对 I/O 流的一个详细讲解.希望对大家有点用吧.(不看后悔哦) 一.什么是IO Java中I/O操作主 ...

  3. java实验 输入输出流_java实验七 输入输出流

    有关java的实验和程序 实验七 输入输出流 一.实验目的和要求 目的: 1.掌握使用输入输出流进行文件的读写操作. 要求: 1.实验报告给出内容1,2的填充代码以及内容3的全部源代码. 二.实验内容 ...

  4. Java(2)-Java IO输入输出流

    一.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  5. Java入门—输入输出流

    File类的使用 文件是:文件可认为是相关记录或放在一起的数据的集合. Java中,使用java.io.File类对文件进行操作 public class FileDemo {public stati ...

  6. java+输出流++空值_一文搞定Java的输入输出流等常见流

    点赞再看,养成习惯,常用流,多看多练准没错!文章较长,建议收藏再看! 1.IO流分析 什么是IO? I:Input O:Output 通过IO可以完成对硬盘的读和写. IO流的分类. 有多种分类方式: ...

  7. 浅谈Java的输入输出流

    Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输 ...

  8. Java - io输入输出流 --转换流

    转换流  转换输出流 OutputStreamWriter: 说明: /* * OutputStreamWriter 这个类的作用 * 就是指定输出流的编码格式 * 这个类的构造方法 需要传递 一个输 ...

  9. Java对象输入输出流示例

    ObjectInputStream:对象输入流 ObjectOutputStream:对象输出流 Serializable:要序列化的对象必须实现此序列化接口,但此接口没有方法需要实现,只是作为一个标 ...

最新文章

  1. ICCV2021|一种用于解决点云场景中同类对象分割的网络
  2. Sql中的递归问题-思考与建议
  3. TypeScript 使用 字典 Dictionary
  4. Android的按钮单击事件及监听器的实现方式
  5. k8s pod重启策略:Always、OnFailure、Never配置示例
  6. 切换activity的动画效果
  7. 只读ViewObject和声明性SQL模式
  8. SAFEARRAY使用方法示例
  9. iPhone 13有搞头,经典功能或将回归!
  10. DatePicker 和 DatePickerDialog的基本使用方法
  11. Yaksa让你抛弃Adapter和ViewHolder写RecyclerView
  12. JAVA 分布式 - 分布式介绍
  13. Java实验——设计一个数组模型,用于存储体育项目成绩男生体育项目有足球、长跑和铅球,女生体育项目有跳舞、体操、游泳。设计排序算法,将变量a、b、c中的数值按大小顺利进行互换(从大到小排列)。
  14. 基于python的视频监控系统_Python远程视频监控程序
  15. 计算机的冷启动与热启动
  16. HX711称重模块的使用
  17. Mixly数码管TM1637时钟实验
  18. Win7系统怎么共享文件夹 win7设置共享文件夹的步骤
  19. 英文ppt结尾欢迎您的意见_不受欢迎的意见,您需要大型的前期设计
  20. 【Python学习】Day-011 Day-012 元组、字符串、字符编码、字符串相关方法、字符串格式化

热门文章

  1. hive安装:3.1.2版本
  2. 输入字符串计算式,输出计算结果
  3. C#ListView控件的相关用法
  4. 百万美元的巨型机器人,除了打架还能做什么?
  5. 计算机图形学 线性代数复习
  6. Echarts3 关系图-力导向布局图
  7. 标准的自定义游标取数过程DECLARE CURSOR_NAME CURSOR FOR SQLSTATMENT
  8. 牛客网 - Ricky’s RealDan’s Ricky(博弈)
  9. 【谷歌浏览器升级之后,导致在谷歌浏览器上面无法正常访问政务网的解决办法】
  10. 王峰:创业就是长征,能扛才能称王