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