java.io 字节流

基类 InputStream 和 OutputStream

字节流主要操作 byte 类型数据,以 byte 数组为准,java 中每一种字节流的基本功能依赖于基本类 InputStream 和 Outputstream,他们是抽象类,不能直接使用。字节流能处理所有类型的数据(如图片、avi 等)。

InputStream

InputStream 是所有表示字节输入流的基类,继承它的子类要重新定义其中所有定义的抽象方法.InputStream是从装置来源地读取数据的抽象表示,例如System中的标准输入流in对象就是一个InputStream类型的实例。

我们先来看看InputStream类的方法:

方法 说明
read()throws IOException 从输入流中读取数据的下一个字节(抽象方法)
skip(long n) throws IOException 跳过和丢弃此输入流中数据的n个字节
available() throws IOException 返回流中可用字节数
mark(int readlimit) throws IOException 在此输入流中标记当前的位置
reset() throws IOException 将此流重新定位到最后一次对此输入流调用mark方法时的位置
markSupport() throws IOException 测试此输入流是否支持mark 和 reset 方法
close() throws IOException 关闭流

在InputStream类中,方法read()提供了三种从流中读数据的方法;

  1. int read(): 从输入流中读一个字节,形成一个0~255之间的整数返回(是一个抽象方法)
  2. int read(byte b[]): 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。
  3. int read(byte b[], int off,int len): 从输入流中读取长度为len的数据,写入数组b中从索引off开始的位置,并返回读取的字节数。

对于这三个方法,若返回-1,表明流结束,否则,返回实际读取的字符数。

OutputStream

OutputStream 是所有表示字节输出流类的基类。子类要重新定义其中所定义的抽象方法,OutputStream 是用于将数据写入目的地的抽象表示。例如 System 中的标准输出流对象 out 其类型是 java.io.PrintStream,这个类是 OutputStream 的子类。

OutputStream 类方法:

方法 说明
write(int b)throws IOException 将指定的字节写入此输出流(抽象方法)
write(byte b[])throws IOException 将字节数组中的数据输出到流中
write(byte b[], int off, int len)throws IOException 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
flush()throws IOException 刷新此输出流并强制写出所有缓冲的输出字节
close()throws IOException 关闭流

看个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class test {

/**
* 把输入流中的所有内容赋值到输出流中
* @param in
* @param out
* @throws IOException
*/
public void copy(InputStream in, OutputStream out) throws IOException {
byte[] buf = new byte[4096];
int len = in.read(buf);
//read 是一个字节一个字节地读,字节流的结尾标志是-1
while (len != -1){
out.write(buf, 0, len);
len = in.read(buf);
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
test t = new test();
System.out.println("输入字符:");
t.copy(System.in, System.out);
}

}