이 해결되었습니다. 내 파일이 손상된 부분을 확인했기 때문에 아래 답변을 수락했습니다. Maven 사유에 대해서는이 질문의 끝 부분을 읽으십시오.1 바이트 파일을 읽으면 0xEF가 반환됩니다. 0xBF 0xBD
바이트 0xA8
을 포함하는 1 바이트 파일을 만들었습니다. 나는 그것을 나중에 사용할 수있는 자바 구조로 읽으려고한다. 자바의 바이트는 0x80
에서 0xFF
까지의 모든 값이 음수로 해석되므로 서명됩니다.
239, hex: ef
read more: 191, hex: bf
read more: 189, hex: bd
0xA8.hex
파일이 1 :
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Test {
public static void main(final String[] args) throws IOException {
// 0xA8.hex contains one byte 0xA8.
final File inputFile = new File(Test.class.getClassLoader().getResource("0xA8.hex").getPath());
final FileInputStream fin = new FileInputStream(inputFile);
final DataInputStream dis = new DataInputStream(fin);
int read = dis.readUnsignedByte();
System.out.println(read + ", hex: " + Integer.toHexString(read));
while (true) {
try {
read = dis.readUnsignedByte();
System.out.println("read more: " + read + ", hex: " + Integer.toHexString(read));
} catch (final EOFException ignored) {
break;
}
}
}
}
아마 정말 내가 부족하지만, 내가 주위에 내 머리를 정리 할 수없는 간단한 .. 출력 위의 프로그램은 무엇인가 있다 -byte 파일 16 진수 편집기를 사용하여 직접 만들었습니다. 그 내용은 실제로 하나의 싱글 바이트입니다 :
[email protected]:~/$ hexdump 0xA8.hex
0000000 a8
0000001
왜, 어떻게하면 1 바이트 (가능하면 부호 없음으로 캐스트) 바이트를 읽을 수 있습니까?
솔루션
내가 메이븐을 사용하고 pom.xml
에 나는 부분이 있었다 :
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<!-- ... -->
</build>
내가 사용 된 0xA8.hex
파일이 대체 문자를 입력, 메이븐에 의해 필터링있어 (은 0xEF에서 0xBF 0xBD를) 여기서 내 0xA8
이었습니다. 지금까지 pom.xml
에게 업데이트 된 다음
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.hex</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.hex</include>
</includes>
</resource>
</resources>
<!-- ... -->
</build>
첫 번째 바이트는 파일의 BOM 헤더입니다 (http://en.wikipedia.org/wiki/Byte_order_mark). Hexeditor로 파일을 열면 그 파일이 보입니다. – Malte
정말 바이너리 파일입니까? 바이트는 처음에 어떻게 쓰여 집니까? – fge
'// 0xA8.hex에 1 바이트 0xA8이 들어 있습니다. '라는 말이 잘못되었습니다. 파일에 0xA8의 1 바이트 만 포함되어 있지 않습니다.이 사실을 증명해야합니다. – nos