Wednesday, April 18, 2007
Java 자바] 이진파일 쓰기, 바이너리 파일로 저장 예제 소스; Binary File Write Save
바이트 값이 들어 있는 배열을 파일로 저장하는 예제 소스입니다. 즉, "이진 파일 쓰기"입니다.
다만, 자바의 byte 는 unsigned가 아니기에 0xFF 상수를 넣으면 possible loss of precision 이런 에러가 발생합니다. 따라서 다음과 같이, 바이트 배열이 아닌 int 배열에 바이트 값을 넣어야 합니다.
소스 파일명: Example.java
컴파일 및 실행 결과 화면:
현재 디렉토리에 out.bin 이라는 8바이트 크기의 이진파일이 생성되어 있을 것입니다. 위의 화면처럼 헥사 뷰어로 보면 그 안에, 소스의 배열에 있는 바이트들이 그대로 나옵니다.
▶▶ Java 자바] 이진파일 읽기, 바이너리 파일 열기; Read Binary File
자바로 헥사 뷰어 만들기: ▶▶ Java 자바] 헥사 뷰어 소스, 헥사 덤프 만들기; Hex View, File Dump Source Code
다만, 자바의 byte 는 unsigned가 아니기에 0xFF 상수를 넣으면 possible loss of precision 이런 에러가 발생합니다. 따라서 다음과 같이, 바이트 배열이 아닌 int 배열에 바이트 값을 넣어야 합니다.
이진 파일에 바이트/정수 배열 쓰기 예제 소스
소스 파일명: Example.java
import java.io.*;
public class Example {
public static void main(String[] args) throws IOException {
String filename = "out.bin";
DataOutputStream out = new DataOutputStream(new FileOutputStream(filename));
// byte 배열이 아닌 정수 배열이어야, byte 데이터가 제대로 입력됨
int[] b = { 0x01, 0x02, 0x03, 0x04, 0x0D, 0x0A, 0x00, 0xFF };
// 위의 int배열의 요소를 하나씩 꺼내어,
// 바이트 형식으로 파일에 저장
for (int i = 0; i < b.length; i++)
out.write(b[i]);
out.close(); // 파일 닫기
}
}
public class Example {
public static void main(String[] args) throws IOException {
String filename = "out.bin";
DataOutputStream out = new DataOutputStream(new FileOutputStream(filename));
// byte 배열이 아닌 정수 배열이어야, byte 데이터가 제대로 입력됨
int[] b = { 0x01, 0x02, 0x03, 0x04, 0x0D, 0x0A, 0x00, 0xFF };
// 위의 int배열의 요소를 하나씩 꺼내어,
// 바이트 형식으로 파일에 저장
for (int i = 0; i < b.length; i++)
out.write(b[i]);
out.close(); // 파일 닫기
}
}
컴파일 및 실행 결과 화면:
D:\Z>javac Example.java && java Example
D:\Z>hexdump.pl out.bin
00000000: 01 02 03 04 0D 0A 00 FF ........
D:\Z>
D:\Z>hexdump.pl out.bin
00000000: 01 02 03 04 0D 0A 00 FF ........
D:\Z>
현재 디렉토리에 out.bin 이라는 8바이트 크기의 이진파일이 생성되어 있을 것입니다. 위의 화면처럼 헥사 뷰어로 보면 그 안에, 소스의 배열에 있는 바이트들이 그대로 나옵니다.
▶▶ Java 자바] 이진파일 읽기, 바이너리 파일 열기; Read Binary File
자바로 헥사 뷰어 만들기: ▶▶ Java 자바] 헥사 뷰어 소스, 헥사 덤프 만들기; Hex View, File Dump Source Code
tag: java
자바 | Java
<< Home