Байт, прочитанный из PDF, пропущен - PullRequest
1 голос
/ 15 сентября 2011
import java.io.*;
class BS{

    public void pStr(){
        try{
            String command="cat /usr/share/doc/bash/rbash.pdf";
            Process ps=Runtime.getRuntime().exec(command);
            InputStream in  = ps.getInputStream();
            int c;
            while((c=in.read())!=-1){
                System.out.print((char)c);
            }

        }catch(Exception e){
            e.printStackTrace();
        }

    }
    public static void main(String args[]){
        new BS().pStr();
    }
}

jabira-whochild-lm.local 23:54:00% java BS | wc 384 2003 43885

jabira-whochild-lm.local 23:54:05% wc /usr / share / doc / bash / rbash.pdf 384 2153 43885 /usr/share/doc/bash/rbash.pdf

Почему я вижу разницу в количестве символов, которые читаются и печатаются наконсоль

Ответы [ 2 ]

0 голосов
/ 16 сентября 2011

Метод InputStream.read() читает только один байт.

Ваша строка исходного кода System.out.print((char)c); неверна. Вызывается метод PrintStream.print(char c), и этот метод записывает два байта для некоторых значений символов не ASCII.

Вам необходимо вызвать метод, который всегда записывает одно байтовое значение. Правильный метод System.out.write(c);.

0 голосов
/ 15 сентября 2011

Не правда ли, что количество символов одинаково, а количество слов различно?

Я предполагаю, что где-то в вашем коде c=in.read() и print((char)c) происходят некоторые проблемы с кодированием.

Можете ли вы сохранить выходные данные в другой файл PDF и выполнить их двоичное сравнение? Если они идентичны, то это действительно странно! Если это не так, вы можете найти ключ к разнице.

...