Java的I/O实战操作

1.什么是I/O流

在Java编程中,IO流是一种用于处理输入和输出操作的机制。它提供了一种统一的方式来读取和写入数据,在软件研发过程中常用于文件读写,网络通信,特定场景的数据库操作,文本处理等。

流最主要的功能就是输入、输出。

简单理解:

获取txt文本文档中内容到程序中处理叫输入流(Input),将程序处理完的内容写到txt文本文档中叫输出流(Output)。实际就是一个读和写的操作。

2.IO流原理

IO流是基于流的概念,它将数据的输入和输出看作是一个连续的流。数据从一个地方流向另一个地方,流的方向可以是输入(读取数据)或输出(写入数据)。Java中的IO流分为字节流和字符流两种类型,分别用于处理字节数据和字符数据。

IO流的原理是通过流的管道将数据从源头传输到目标地。源头可以是文件、网络连接、内存等,而目标地可以是文件、数据库、网络等。IO流提供了一组丰富的类和方法来实现不同类型的输入和输出操作。

3.IO流的分类

Java中的IO流可以按照数据的类型和流的方向进行分类。

按数据类型分类

  1. 字节流(Byte Stream):以字节为单位读写数据,适用于处理二进制数据,如图像、音频、视频等。常见的字节流类有InputStream和OutputStream。
  2. 字符流(Character Stream):以字符为单位读写数据,适用于处理文本数据。字符流会自动进行字符编码和解码,可以处理多国语言字符。常见的字符流类有Reader和Writer。

按流的方向分类

  1. 输入流(Input Stream):用于读取数据。输入流从数据源读取数据,如文件、网络连接等。常见的输入流类有FileInputStream、ByteArrayInputStream、SocketInputStream等。
  2. 输出流(Output Stream):用于写入数据。输出流将数据写入到目标地,如文件、数据库、网络等。常见的输出流类有FileOutputStream、ByteArrayOutputStream、SocketOutputStream等。

分类继承结构图如下:

4). 输入、输出流代码示例

开发过程中使用比较多的是InputStream和OutputStream,这两个类层级较高的父类,是抽象类,通常会创建其下的子类。

  1. InputStream
  2. ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。下面一以FileInputStream和FileOutputStream为例。
  3. OutputStream
  4. ByteArrayOutputStream、FileOutputStream是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,

  1. FileInputStream案例

字节输入流的步骤如下:

1、创建流对象

2、创建一个缓存字节的容器数组

3、读取数据

4、操作保存数据的数组

5、关闭流

  1. public void input() throws IOException {
  2.         String fileName="D:\\file\\test.txt";
  3.         File file = new File(fileName);
  4.         InputStream in = new FileInputStream(file);
  5.         byte[] b = new byte[1024];
  6.         //Reads some number of bytes from the input stream and stores them into the buffer array b.
  7.         in.read(b);
  8.         in.close();
  9.         System.out.println(new String(b));
  10. }

可以将文件转成流后,调用read()方法将流读取出来存到字节数组中,所存的字节数组作为参数传入,就可以在控制台打印出文件中所写的内容。

  1. FileOutputStream案例

将输出流写入文件的步骤如下:

1、选择流:创建流对象

2、准备数据源,把数据源转换成字节数组类型

3、通过流向文件当中写入数据

4、刷新流

5、关闭流

  1. public void output() throws IOException {
  2.    String s = "hello";
  3.    OutputStream out = new FileOutputStream("D:\\file\\test.txt");
  4.    byte[] bytes = s.getBytes();
  5.    out.write(bytes);
  6.    out.close();
  7. }

OutputStream是字节流,所以要先将输出内容转成字节数组,在通过write(byte [])方法写出去。

5).总结

流的读写其实很简单,且步骤比较固定,但是将文件转成流之后可操作性就变得很大很大。

一不可能直接对文件进行修改,但流是通用的,改变流的内容、形式再输出给文件,展示出来的效果就发生改变;

二是文件有可能很大,不可能将这么大的文件在网络上传递,就要转成流,一点一滴连续的传输。这就是为什么下载或上传过程中可以随意暂停、开始也不影响,因为只要保证这些点滴最终拼起来是完整的即可。

本文只演示了最简单的对txt文本格式的数据读写,原理是一样的,每一位数据都有唯一对应的字节码,可以从数据转成字节、从字节转成数据。所以才叫字节流。

但文件个格式多种多样,输出前必须要转成相同格式的流,就是在InputStream和OutputStream操作之间按照自己需求自定义操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值