我们从输入流中读取数据最常用的方法基本上就是如下 3 个 read() 方法了:
1 、 read () 方法,这个方法 从输入流中读取数据的下一个字节。返回 0 到 255 范
围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1 。
public static void inputStreamRead1() {
try{
InputStream is = new FileInputStream(“E:\\test.txt”);
//构造一个输出流对象(写数据)
OutputStream os = new FileOutputStream(“E:\\ctest.txt”);
int len;//表示读入的数据(十进制的形式表示)
//FileInputStream可以使用read()方法一次读取一个字节,读入的数据以int类型返回,
所以,你要是使用System.out.println()将数据显示出来的时候是以10进制的方式显示
while((len = is.read())!=-1){//若没有读完继续读
System.out.println(“len=”+len);
os.write(len);
}
os.close();
is.close();
}catch(Exception e){
e.printStackTrace();
}
}
2 、 read (byte[] b,int off,int len) 方法, 将输入流中最多 len 个数据字节读入
byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字
节数。 b - 读入数据的缓冲区。 off - 在其处写入数据的数组 b 的初始偏移量。 len - 要读取的
最大字节数。
public static void inputStreamRead2(){
try{
InputStream is = new FileInputStream(“E:\\test.txt”);
//构造输出流对象(写数据)
OutputStream os = new FileOutputStream(“E:\\ctest.txt”);
//创建一个长度为1024的byte数组
byte[] b = new byte[1024];
//int len;表示成功读取的字节数的个数
//FileInputStream可以使用read(byte[] b )每次读取多个(b.length)字节数据(每次
最多读取多少个)到byte数组当中
while((len = is.read(b))!=-1){//将数据读到缓冲区b中
System.out.println(“len=”+len);
os.write(b);
}
os.close();
is.close();
}catch(Exception e){
e.printStackTrace();
}
}
3 、 read (byte[] b) 方法, 从输入流中读取一定数量的字节,并将其存储在缓冲区数
组 b 中。以整数形式返回实际读取的字节数。
public static void inputStreamRead3(){
try{
//构建输入流对象(读文件)
InputStream is = new FileInputStream(“E:\\test.txt”);
//构建输出流对象(写文件)
OutputStream os = new FileOutputStream(“E:\\ctest.txt”);
//声明一个大小为输入流大小的数组
byte[] b = new byte[1024];
int len = 0;//表示成功读取的字节数的个数
while((len=is.read(b,len,1024))!=-1){
System.out.println(“len=”+len);
os.write(b);
}
os.close();
is.close();
}catch{
e.printStackTrace();
}
}
第一个方法典型的确定就是处理效率低,不是某些特殊情况,很少使用它,下面说说第 2
个方法跟第 3 个方法,第 3 个方法的本本质其实就是第 2 个方法的特殊情况, 效果等同于:
read(b, 0, b.length)