InputStream read(byte [] b,int off,int len) - 删除文件的其余部分?

时间:2011-01-22 14:06:03

标签: java file file-io hex inputstream

这是我今天早上在这里提出的一个问题的扩展,所以如果你认为你之前看过这个代码,请不要忽视:D

for (String name : filenames) {
FileInputStream in = new FileInputStream(input.readUTF());
    int byteCounter = 0;
    int rowCounter = 0;
    long bufferCounter = 0;
    byte[] b = new byte[10];
    int read;

    //in.skip(10);
    //while((read = in.read()) != -1){
    while((read = in.read(b, 0, 10)) != -1){
        byteCounter ++;
        if (byteCounter != 1000){
            if (rowCounter == 1){
                System.out.println("\n");
                rowCounter = 0;
            }
        System.out.print(org.apache.commons.codec.binary.Hex.encodeHexString(b));
            bufferCounter ++;
            rowCounter ++;
        }else{
                byteCounter = 0;
                try{
                    Thread.sleep(200);
                }catch(InterruptedException e) {
                }
        }
    }
    System.out.println("\n"+"================"+"\n");
}

您好,经过几个小时的努力才能获得此代码,我几乎完成了我正在处理的特定组件。该程序接收一个指定的文件,并应该将该文件的前10个字节转换为Hex。一旦它获取了该文件的前10个字节,它应该停止并移动到下一个指定的文件。目前,它占用整个文件并将其分成多个10字节“块”然后打印出来。换句话说,它在我认为读取的前10个字节(byte [] b,int off,int len)之后没有停止

示例输出:

  

74656173676173677361

     

67616773617367616773

     

61676173617367616773

但它应该产生

  

74656173676173677361

任何建议都会非常感激,我的意思是:)

2 个答案:

答案 0 :(得分:6)

放弃while循环怎么样?正如我在your first question中已经告诉过你的那样,如果您确定总是至少有10个字节,则可以采用以下方法:

byte[] b = new byte[10];
new DataInputStream(new FileInputStream(input.readUTF())).readFully(b);

否则请选择以下内容:

byte[] b = new byte[10];
int count = 0;
while (count < b.length) {
    int n = in.read(b, count, b.length-count);
    if (n==-1) break;
    count += n;
}

答案 1 :(得分:1)

你的外部for循环中有一个while循环(while((read = in.read(b,0,10))!= -1))循环遍历整个文件中的所有字节。

尝试从in中读取单个字节的简单for(int i = 0; i&lt; 10; i ++),并将它们转换为hex。

不要忘记在finally {}子句中关闭文件和输入流!

相关问题