java输入输出10:IO流(IO流概述及其分类)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuming226/article/details/84101794
1 概念

1、IO流用来处理设备之间的数据传输。
2、Java对数据的操作时通过流的方式。
3、Java用于操作流的类都在IO包中。
4、流按流向分为两种:输入流,输出流。
5、流按照操作类型分为两种:(1)字节流:字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的。(2)字符流:字符流只能操作纯字符数据,比较方便。

2 IO流常用父类

(1)字节流的抽象父类:

1、InputStream
2、OutputStream

(2)字符流的抽象父类:

1、Reader
2、Writer

java的输入流主要由InputStream和Reader作为基类,而输出流则主要由OutputStream和Writer作为基类。它们都是一些抽象基类,无法直接创建对象。

字节流和字符流的用法几乎是完全相同的,其区别在于他们的读取数据单元不同,字节流操作的数据单元是8位的字节,字符流操作的数据单元是16位的字符。

3 IO程序书写

1、使用前,导入IO包中的类。
2、使用时,进行IO异常处理。
3、使用后,释放资源。

演示:

package filePackage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Demo3_FileInputStream {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("C:\\demoFile1\\file.txt");//创建流对象
		/*int a = fis.read();//从硬盘上读取一个字节
		System.out.println(a);
		int b = fis.read();
		System.out.println(b);
		int c = fis.read();
		System.out.println(c);
		*/
		int m;
		while((m = fis.read()) != -1) {
			System.out.print(m + "\t");
		}
		fis.close();//关闭流释放资源
	}
}

file.txt文件内容为:abc
执行结果如下:
在这里插入图片描述

4 IO流read()方法返回值为什么是int

read()方法读取的是一个字节,为什么返回是int,而不是byte?

因为字节输入可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到11111111(补码),那么11111111是byte类型的-1,程序遇到-1就会停止读取,后面的数据就无法读取到。而在读取的时候用int类型接收,如果11111111会在其前面补上24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型。

猜你喜欢

转载自blog.csdn.net/yuming226/article/details/84101794