InputStream read (byte [] b, int off, int len) - удалить оставшуюся часть файла? - PullRequest
0 голосов
/ 22 января 2011

Это расширение вопроса, который я задал здесь сегодня утром, поэтому, пожалуйста, не оставляйте без внимания, если вы думаете, что видели этот код раньше: 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 байтов этого файла в шестнадцатеричный формат.Как только он получит первые 10 байтов этого файла, он должен остановиться и перейти к следующему указанному файлу.В настоящее время он берет весь файл и делит его на несколько 10-байтовых «кусочков», которые затем распечатывает.Другими словами, он не останавливается после того, как первые 10 байтов, которые я считал прочитанными (byte [] b, int off, int len), сделали

Пример вывода:

74656173676173677361

67616773617367616773

61676173617367616773

но вместо него должно получиться

74656173676173677361

Любой совет будеточень ценю это, и я действительно имею в виду, что:)

Ответы [ 2 ]

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

Как насчет сброса цикла while?Как я уже говорил вам в вашем первом вопросе , если вы уверены, что всегда есть хотя бы 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 голос
/ 22 января 2011

У вас есть цикл while внутри внешнего цикла for (while ((read = in.read (b, 0, 10))! = -1)), который циклически перебирает все байты во всем файле.

Попробуйте простой for (int i = 0; i <10; i ++), который читает один байт из in и преобразует их в шестнадцатеричный формат. </p>

И не забудьте закрыть ваши файлы и входные потоки в предложении finally {}!

...