在Java中读取文件的前10个字节

在Java中读取文件的前10个字节,java,file-io,hex,Java,File Io,Hex,你好,我希望有人能帮我解决一个问题。我试图让我的程序读取指定文件的前10个字节。我可以让它与skip()一起工作,但显然这与我想要的正好相反(它删除了前10个) 我到处找都没用,如果你能帮我,那就太好了。 您可能会看到,我已经尝试将读取(b,off,len)输入到代码中,但这只会生成随机字符作为输出,而不是我想要的实际十六进制字符74 65 71等(编辑:这些随机字符似乎是读取字节数的十六进制代码。因此,对于包含23个十六进制字符的文本文件,它会生成一个a 3(或者换句话说:10,10,3=23

你好,我希望有人能帮我解决一个问题。我试图让我的程序读取指定文件的前10个字节。我可以让它与skip()一起工作,但显然这与我想要的正好相反(它删除了前10个) 我到处找都没用,如果你能帮我,那就太好了。 您可能会看到,我已经尝试将读取(b,off,len)输入到代码中,但这只会生成随机字符作为输出,而不是我想要的实际十六进制字符74 65 71等(编辑:这些随机字符似乎是读取字节数的十六进制代码。因此,对于包含23个十六进制字符的文本文件,它会生成一个a 3(或者换句话说:10,10,3=23)

问题就在这里

    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");   
}  
read
包含从流中有效读取的字节数。这些字节位于数组
b

顺便说一下:你的数组的大小是8。如果你想读取10个字节,你应该将它增加到10

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

这是最简单的方法,但是如果可用的字节少于10个,它会抛出。如果你不需要,请使用循环。不知何故,我不明白你在做什么,它看起来真的不像读取前10个字节:
if(byteCounter!=1000)

嘿,lweller,感谢你这么快的响应。是的,我注意到了8个字(这只是我在拼命地尝试让它工作lol)我尝试过改变它,现在它显示System.out.print(Integer.toHexString(b)+“\t”);但这会产生一个错误“java.lang.Integer中的toHexString(int)不能应用于(byte[]),尝试从哪里使用encodeHexString(b)部分开始?如果这似乎是一个愚蠢的问题,我很抱歉,但我也尝试将它放在system.out.println部分和其他位置,但没有效果:您必须下载apache commons doced lib并将其添加到类路径中,然后编写类似于
system.out.print(org.apache.commons.codec.binary.Hex.encodehextstring(b)+“\t”的东西
谢谢你一直关注lweller,非常感谢。好的,转到你发送的链接,将commons-codec-1.4-bin.zip文件下载到我的下载文件夹中,解压缩后,它现在就放在我的下载文件夹中。我猜它必须转到程序文件中的java部分,但除此之外,我不知道。我是一个uni学生们,我们从来没有做过这样的事情,如果问这样一个愚蠢的问题,那么很抱歉:)我很确定在.read(b,0,10)中出现
时它会失败
读取少于10个字节。这几乎从未发生过,但无法保证。我看到我之前的评论可能不清楚:我的意思是:如果有更多可用字节,这几乎从未发生过,因为数据是以扇区大小的倍数从磁盘传输的。:s现在我完全不知道了。你是说有什么吗我的编码有误/丢失?很抱歉不得不问,但你知道……反过来说,你的编码丢失了我。
read
是读取的字节数,可能在1到10之间。你将问题命名为
读取文件的前10个字节
,但你确实重复读取了一些随机字节数。你的字节计数器计数那么,你真的想读取文件的前10个字节吗?如果是这样的话,请看我的答案,否则考虑重新命名问题。
byte[] b = new byte[10];
new DataInputStream(new FileInputStream(input.readUTF())).readFully(b);