java中,对于一个InputStream流,需要从中间的第n个字节开始,截取到第m个字节,如何处理?

解决方案 »

  1.   

    这里API和源码例子
    一个英文的,一个翻译的:
    http://apicode.gicp.net/class.do?api=selectByfatherIndex&father=255
    http://apicodecn.gicp.net/class.do?api=selectByfatherIndex&father=255
      

  2.   

    可以的。Test.java
    public class Test {
    public static void main(String[] args)  {
    try {
    byte []data = new byte[10];
    FileInputStream fis = new FileInputStream("c:\\test.txt");
    fis.skip(6);
    fis.read(data);
    fis.close();

    for(int i=0;i<data.length;i++) {
    System.out.print((char)data[i]);
    }

    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }
    }
    c:\test.txthello,world.wellcome.good job.
    执行结果
    output:world.well
    Good Luck.
      

  3.   

    read(byte[] b, int off, int len) 
              将最多 len 个数据字节从此输入流读入字节数组。
      

  4.   


    的确有这个问题。那应该考虑buffer
    以下代码解决这个问题。
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;public class Test {
    private final static int BUFFER_SIZE = 10;
        public static void main(String[] args)  {
            try {
             int need2read = 22;
             int probe = 0;
                byte []data = new byte[BUFFER_SIZE];
                FileInputStream fis = new FileInputStream("c:\\test.txt");
                fis.skip(6);
                
                while((probe<need2read/BUFFER_SIZE) && (fis.read(data)!=-1)) {
                 for(int i=0;i<data.length;i++) {
                 System.out.print((char)data[i]);
                 }
                 probe++;
                }
                
                //
                int overage = need2read%BUFFER_SIZE;
                if(overage != 0) {
                 int ir = fis.read(data,0,overage);
                for(int i=0;i< ir;i++) {
             System.out.print((char)data[i]);
             }
                }
                
                fis.close();
                
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
    }
      

  5.   

    也在考虑这个问题。只能skip掉吗?