Java超详细梳理IO流的使用方法上(java文件io流原理)

网友投稿 296 2022-08-01


目录java语言的输入输出类库1.流的概念2.流的分类3.流的作用4.输入输出流类库使用InputStream和OutputStream流类1.基本输入输出流1.InpitStream流类2.OutputStream流类2.输入输出流的应用2.1文件输入输出流2.2顺序输入流2.3管道输入输出流2.4过滤输入输出流2.5标准输入输出

你要学会:

流的概念处理字节流的类处理字符流的类Java标准输入输出文件管理类

Java语言的输入输出类库

1.流的概念

流是指计算机各部件之间的数据流动。可以是原始的二进制数据,也可以是编码后的特定数据。

2.流的分类

按照数据的传输方法,流分为输出流和输入流。按照内容区分为字节流和字符流。

3.流的作用

用户可以通过流来读写数据。

输入输出流

Java中把不同的输入输出源(文件,屏幕,键盘等)抽象为流,输入输出的数据称为数据流,数据流是Java程序接收和发送数据的一个通道。把数据从键盘等外设传递到程序称为输入流,输入流只能从其读取数据而不能向其写入数据,输出流类似。

数据的接收和发送都是沿着数据序列顺序进行的,每一个数据都要等待前面的数据读入或者送出才能进行读写。

缓冲流

数据流中的每次操作都是以字节为单位的,为了提高数据传输效率,通常使用缓冲流。缓冲流就是为一个已有的流配上一个缓冲区。例如写入数据时,数据会先发送到缓冲区,当缓冲区满时,在发送到外部设备。

4.输入输出流类库

Java语言的输入输出流都封装在java.io包中,使用前要先导包。用户可以选择包里的不同的流类实现各种数据的输入输出。其中字节流每次读取8位二进制数,不能分解,重组和理解这些数据,所以可以恢复到原来有意义的状态。字符流每次读取16位二进制数,将其作为一个字符处理。字符流的源或目标通常是文本文件,Java语言使用的是Unicode编码,字符流可以实现程序内部格式与文本文件,显示输出等外部格式的转换。在java.io中有四个类:

InputStream等四个类是抽象类,用于数据的输入输出。不能直接使用,因为不能表明具体对应哪一种输入输出设备,更体现了输入输出操作独立与相关设备。File是文件类,用于磁盘文件与文件夹的管理。RandomAccessFile是随机访问文件类,用于实现对磁盘文件的随机读写操作。字节流类通常被用来读写图片视频等二进制数据,但也可以用来处理文本文件,字符流类通常用来处理文本文件。由于字节流不能直接操作Unicode编码,因此不提倡使用字节流读取文本文件,因为当文件中有汉字时可能会出现乱码。

使用InputStream和OutputStream流类

下面流类的构造方法和常用方法参见Java api

1.基本输入输出流

1.InpitStream流类

InputStream流类中包含了一套所有字节输入都需要的方法,可以完成从输入流读入数据的操作。当程序从键盘磁盘文件等外设读入数据时,要先创建一个子类的对象来与外设连接,再调用该对象继承的read()方法实现输入操作。流中的方法都声明抛出异常,所以程序中调用流方法时要处理异常,否则编译不通过。

2.OutputStream流类

OutputStream类中包含了一套所有字节输出都需要的方法,可以完成从输出流写入数据的操作。当程序向屏幕磁盘文件等外设输入数据时,要先创建一个子类对象来与外设连接,再调用该对象继承的write()方法实现输出操作。

2.输入输出流的应用

InputStream类和OutputStream类时抽象类,具体实现输入输出操作时要派生出不同的子类,用于不同情况数据的输入输出操作。一起来学习这些类趴:

2.1文件输入输出流

2.2顺序输入流

顺序输入流SequenceInputStream是将多个输入流顺序连接在一起,形成单一的数据输入流,没有对应的数据输出流。在输入数据时,顺序输入流依次打开每个输入流并读取数据。直到最后一个输入流读取到EOF时为止。

2.3管道输入输出流

管道输入输出流为了实现程序内部线程间的通信或者不同程序的通信,这两个类要结合使用,输入流作为接受端,输出流做为发送端。管道字节输入流PipedInputStream类和管道字节输出流PipedOutputStream类提供了管道的方式数据输入输出管理类。

2.4过滤输入输出流

过滤字节输入输出流时建立在基本输入输出流之上的,在输入输出数据时可以对数据做类型和格式的转换,即可以对二进制字节数据理解和编码转换。过滤字节输入流FilterInputStream和过滤字节输出流FilterOutputStream可以在数据读写的同时实现数amVwVISfeb据操作。是上面两个类的直接子类,也属于抽象类,被DateInputStream和DateOutputStream继承。有时候我们并不希望数据的传输以字节为基本单位,如一个二进制文件存放的是整型数据,我们希望按照int为基本单位进行数据传输。这两个过滤流可以将基本数据输入输出流转换为基本数据类型的过滤流。

2.5标准输入输出

前面说到的,在一般操作时,要先创建一个输入输出的实例化对象,完成与外设的连接,但是在与标准的输入输出设备连接时不用这样。Java系统实现在java.lang.System包中定义了静态流对象,输入流System.in,一般指键盘。输出流System.out,一般指屏幕。标准错误输出设备System.err使程序运行错误时有日志等固定输出位置。(1)标准输入,System.in是BufferedInputStream的对象,当程序从键盘读入数据时,调用System.in的read方法,从缓冲区读入一个二进制数据。使用时包含在try语句中,并捕获或者抛出异常。(2)标准输出:System.out是http://打印输出流PrintStream的对象。PrintStream类是过滤字节输出流FilterOutputStream的一个子类,定义了print和println等不同的方法向屏幕输出。(3)标准错误流:System.err用于显示用户错误信息,是由PrintStream派生的类,作用是利用print把错误打印到屏幕上。使用与out同样的方法:

例如System.err.print("错误")。

代码示例:

import java.io.*;

public class A_2 {

public static void main(String[] args){

try{

byte[] b=new byte[128];

System.out.print("请输入字符:");

int count=System.in.read(b);

System.out.print("输入的是:");

for(int i=0;i

amVwVISfeb System.out.print(b[i]+" ");

System.out.println();

}

class InClass=System.in.getClass();

http:// class OutClass=System.out.getClass();

}

}

}

amVwVISfeb System.out.print(b[i]+" ");

System.out.println();

}

class InClass=System.in.getClass();

http:// class OutClass=System.out.getClass();

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Redis6搭建集群并在SpringBoot中使用RedisTemplate的实现
下一篇:SpringBoot项目为何引入大量的starter?如何自定义starter?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~