什么是IO流?简单来说,就是用来处理设备之间的数据传输
Java对数据的操作是通过流的方式,操作流相关的类都在IO包中
按流向分为两种:1.输入流,2.输出流。
按操作类型分为两种:1.字节流 --可以操作任何数据,在计算机中数据都是以字节的形式存储的;2.字符流 --只能操作纯字符数据。
在IO流常用父类:1.字节流的抽象父类:InputStream和OutputStream;2.字符流的抽象父类:Reader 和Writer 。
关系与IO程序在工具中的使用,使用前,导入IO包中相关的类;使用时,要关注好IO异常的处理;使用后,记得释放资源。
那么关于IO流(FileInputStream),我们拿例子来说明一波。先明白read()方法,一次读取一个字节。
//创建一个文件输入流对象,并关联test.txt
FileInputStream fs = new FileInputStream("test.txt");
//定义变量,记录每次读到的字节
int a;
//将每次读到的字节赋值给b并判断是否是-1
while((a=fs.read()) != -1) {
//打印每一个字节
System.out.println(a);
}
//关闭流释放资源
fs.close();
在IO流中,FileInputStream返回值为什么是int? read()方法读取的是一个字节,为什么返回是int,而不是byte?
因为字节输入流可以操作任意类型的文件,比如图片,音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111,那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上。24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型。
在IO流中,FileInputStream返回值为什么是int? read()方法读取的是一个字节,为什么返回是int,而不是byte?
因为字节输入流可以操作任意类型的文件,比如图片,音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111,那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上。24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型。
对于IO流的FileOutputStream,我们也拿案例说明一下,它里面包含的方法: write()一次写出一个字节。
//如果没有test.txt,会创建出一个
FileOutputStream fos = new FileOutputStream("test.txt");
//虽然写出的是一个int数,但是在写出的时候会将前面的24个0去掉,所以写出的一个byte
fos.write(98);
fos.write(99);
fos.close();
那么对于图片和音频的操作原理,可以关注好笔者,后续继续来给大家分享IO流的操作。
(小编的另一个平台文章地址:https://zhuanlan.zhihu.com/p/124288097)
网友评论