use*_*522 0 java file-io hex inputstream file
这是我今天早上在这里提出的一个问题的延伸,所以如果你认为你之前看过这个代码,请不要忽视: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");
}
Run Code Online (Sandbox Code Playgroud)
嗨,经过几个小时的努力才能得到这个代码,我几乎完成了我正在处理的特定组件.该程序接收一个指定的文件,并应该将该文件的前10个字节转换为Hex.一旦它获取了该文件的前10个字节,它应该停止并移动到下一个指定的文件.目前,它占用整个文件并将其分成多个10字节"块"然后打印出来.换句话说,它在我认为读取的前10个字节之后没有停止(byte [] b,int off,int len)
示例输出:
74656173676173677361
67616773617367616773
61676173617367616773
但它应该产生
74656173676173677361
任何建议都会非常感激它,我的意思是:)
放弃while循环怎么样?正如我在第一个问题中已经告诉过你的那样,如果你确定总是至少有10个字节,那就是以下方法:
byte[] b = new byte[10];
new DataInputStream(new FileInputStream(input.readUTF())).readFully(b);
Run Code Online (Sandbox Code Playgroud)
否则去这样的事情:
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;
}
Run Code Online (Sandbox Code Playgroud)