12.3字节流
今天主要讲的是字节流,同时也讲了转换流以及标准输入输出流,具体内容如下:
一、 字节流
1、 字节流主要是inputSream类和outputStream类
2、 字节流可以操作任何数据而字符流只可操作文本数据
3、 字符流使用的是字符数组;字节流使用的是字节数组
下面介绍InputStream类
1、InputStream类是所有面向字节的输入流的父类,为java.io包中的抽象类。类的定义如下:
Public abstract class InputStream extends Object
2、字节流是直接从数据源直接获取数据的。
3、InputStream类中声明了用于字节流输入的多个方法,包括读取数据、标记位置、获取数据量、关闭数据流等。
4、属于InputStream类的方法介绍如下:
Read():从流中读入数据。
Available():返回流中可用字节数。
Close():关闭流。
5、InputStream类的层次结构如下:
OutputStream类
1、OutputStream类为所有面向字节的输出流的父类,为java.io包中的抽象类。类的定义如下:
Public abstract class OutputStream extends Object
2、OutputStream类中声明了用于字节流输出的多个方法,包括写出数据、刷新缓冲区、关闭数据流等。
3、属于OutputStream类的方法介绍如下:
Write(int b):将一个整数输出到流中。
Write(byte b[]):将数组中的数据输出到流中。
Write(byte b[],int off,int len):将数组b中从off指定的位置开始len长度的数据输出到流中。
4、Flush():将缓冲区中的数据强制送出、刷新。
Close():关闭流。
OutputStream类的层次结构如下:
二、文件字节输入输出流(FileInputStream/FileOutputStream)
如上图中所示InputStream和OutputStream是抽象类不能实例化所以文件输入和输出的类一般就使用FileInputStream和FileOutputStream这两个子类来处理,其处理对象都是文件。
1、 文件字节输入流类FileInputStream的使用:
FileInputStream fis = new FileInputStream("a.txt");
//fis.available();//获取关联的文件的字节数。
//如果文件体积不是很大,可以这样操作。
byte[] buf = new byte[fis.available()];//创建一个刚刚好的缓冲区。但是这有一个弊端,就是文件过大,大小超出jvm的内容空间时,会内存溢出。
fis.read(buf);
System.out.println(new String(buf));
2、文件字节输出流类FileOutputStream的使用:
FileOutputStream fos = new FileOutputStream("a.txt");
fos.write(12);//直接将数据写入到了目的地。
fos.close();//只关闭资源。
三、 转换流
1、在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在一组字节流—字符流的转换流。
a)OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。(字符到字节的桥梁)
b)InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。(字节到字符的桥梁)
转换过程如下图所示:
以文件操作为例,则在内存中的字符数据需要通过OutputStreamWriter变为字节流才能保存在文件中,读取的时候需要讲读入的字节流通过InputStreamReader变为字符流
OutputStreamWriter和InputStreamReader的构造—他么本身就是字符流,又具有转换的作用,因此在构造的时候,需要传入字节流对象
注意:在使用FileReader操作文本数据时,该对象使用的是默认的编码表。如果要使用指定编码表时,必须使用转换流
四、 标准输入/输出流
标准的输入输出是指在控制台方式下,程序与系统进行交互的方式,分为三种:
a) 标准的输入,对象是键盘。
b) 标准的输出,对象是显示器屏幕。
c) 标准的错误输出,对象也是显示器屏幕。
Java通过System类实现标准的输入输出功能
d) public static final InputStream in
e) public static final InputStream out
f) public static final InputStream err
标准输入System.in
System.in作为字节输入流类InputStream的对象,实现标准的输入,使用其read()方法从键盘接收数据。
g) public int read() throws IOException
h) public int read(byte[] i) throws IOException
标准的输出System.out
System.out是打印流类PrintStream的对象,用来实现标准输出。print()和println()方法,支持任意的基本类型作为参数。
i) public void print(参数)
public void println(参数)