Java 跳过从PDF读取的字节

Java 跳过从PDF读取的字节,java,process,command,bytearray,Java,Process,Command,Bytearray,jabira-whosechild-lm.local 23:54:00%爪哇BS|wc 384 2003 43885 jabira-whosechild-lm.local 23:54:05%wc/usr/share/doc/bash/rbash.pdf 384 2153 43885/usr/share/doc/bash/rbash.pdf 为什么我看到读取的字符数有差异 并打印到控制台上 不是字符数相同,但单词数不同吗 我猜在你的c=in.read()和print((char)c)code中的某

jabira-whosechild-lm.local 23:54:00%爪哇BS|wc 384 2003 43885

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

为什么我看到读取的字符数有差异 并打印到控制台上


不是字符数相同,但单词数不同吗

我猜在你的
c=in.read()
print((char)c)
code中的某个地方有一些编码问题


您能将输出保存到另一个PDF文件并对它们进行二进制比较吗?如果它们是一样的,那真的很奇怪!如果不是,那么您可能会在差异中找到线索。

方法
InputStream.read()
只读取一个字节

您的源代码行
System.out.print((char)c)是错误的。调用方法
PrintStream.print(char c)
,该方法为一些非ASCII字符值写入两个字节

您需要调用一个总是写入一个字节值的方法。正确的方法是
System.out.write(c)

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();
    }
}