Чтение первых 10 байтов файла в Java - PullRequest
2 голосов
/ 22 января 2011
    for (String name : filenames) {   
FileInputStream in = new FileInputStream(input.readUTF());   
    int byteCounter = 0;   
    int rowCounter = 0;   
    long bufferCounter = 0;   
    byte[] b = new byte[8];   
    int read;   

    //in.skip(10);   
    //while((read = in.read()) != -1){   
    while((read = in.read(b, 0, 10)) != -1){   
        byteCounter ++;   
        if (byteCounter != 1000){   
            if (rowCounter == 16){   
                System.out.println("\n");   
                rowCounter = 0;   
            }   
        System.out.print(Integer.toHexString(read) + "\t");   
            bufferCounter ++;   
            rowCounter ++;   
        }else{   
                byteCounter = 0;   
                try{   
                    Thread.sleep(200);   
                }catch(InterruptedException e) {   
                }   
        }   
    }   
    System.out.println("\n"+"================"+"\n");   
}  

Привет, я надеялся, что кто-нибудь сможет мне помочь с проблемой, с которой я столкнулся.Я пытаюсь заставить мою программу читать первые 10 байтов указанного файла.Я могу заставить его работать с skip (), но, очевидно, это противоположно тому, что я хочу (вместо этого удаляются первые 10). Я просмотрел все безрезультатно, если вы можете мне помочь, это было быотличный.Вы, вероятно, можете видеть, что я уже пытался ввести чтение (b, off, len) в код, но это просто выводит случайные символы в качестве выходных данных, а не фактические шестнадцатеричные символы, которые я хочу 74 65 71 и т. Д.символы представляют собой шестнадцатеричный код для числа прочитанных байтов, поэтому для текстового файла, содержащего 23 шестнадцатеричных символа, он выдает aa 3 (или, другими словами: 10,10,3 = 23)

Ответы [ 2 ]

3 голосов
/ 22 января 2011
byte[] b = new byte[10];
new DataInputStream(new FileInputStream(input.readUTF())).readFully(b);

Это самый простой способ, но он выбрасывает, если доступно менее 10 байтов. Если вы не хотите этого, используйте цикл. Почему-то я не понимаю, что вы делаете, это действительно не похоже на чтение первых 10 байтов: if (byteCounter != 1000)

1 голос
/ 22 января 2011

проблема здесь

System.out.print(Integer.toHexString(read) + "\t");

read содержит количество байтов, эффективно прочитанных из потока. Байты находятся в массиве b.

Кстати: ваш массив имеет размер 8. Вы должны увеличить его до 10, если хотите прочитать 10 байтов!

...