分别前后用Read(byte[])(记作R1)放法,和Read(byte[] b,int off,int len)(记作R2)读取文件内容。先后设置将R1()读取的内容放到缓冲buffer1,将R2放到buffer2,输出结果显示的只有buffer1的数据。假如它们的先后顺序调转了,结果是两者被输出!为什么这样的?请求大大们解答。
import java.io.*;public class fis{

public static void main(String[] args) throws IOException {
File file=new File("fis.java");
if(file.exists()){
FileInputStream fs=new FileInputStream(file);
int len=fs.available();
byte buffer1[]=new byte[len];
byte buffer2[]=new byte[len];
//fs.read(buffer2,0, 6);
//String f2=new String(buffer2);
fs.read(buffer1);
String f1=new String(buffer1);
fs.read(buffer2,0, 6);
String f2=new String(buffer2);
System.out.println(f1);
System.out.println("===========");
System.out.println("截取的部分内容:"+f2);
}
else System.out.println("文件不存在或读取错误!");
}
}

解决方案 »

  1.   

    fs.read(buffer1); 第一次的时候问已经 读到末尾了fs.read(buffer2,0, 6); 再读的时候当然没有了
    fs.read(buffer2,0, 6); 的意思就是读前六个字节从buffer2的0位子开始原因就是你使用了int len=fs.available(); 
    byte buffer1[]=new byte[len]; 
    使一次全部读完了!
      

  2.   

    fs.read(buffer1)读取了,那么fs.read(buffer2,0, 6)就没有可读内容了?或者说对象fs只允许读一次?另外fs.available返回的不受阻塞地从此输入流中读取(或跳过)的估计字节数,byte buffer1[]=new byte[len]不是建立一个长度为len的缓冲么?而我建立的第二个缓冲区为什么会没有数据的呢?是读不了fs对象的内容?还是不太明白!哪位大大可以详细说明。衷心感谢