2010-03-24 6 views
2

Java를 사용하여 이진 데이터를 바꾸는 방법을 찾으려고합니다. 아래의 은 swf 파일에서 "foo"를 "bar"로 바꾸는 PHP 예제입니다.Java에서 이진 데이터를 다시 쓰는 방법

<?php 
$fp = fopen("binary.swf","rb"); 
$size = filesize("binary.swf"); 
$search = bin2hex("foo"); 
$replace = bin2hex("bar"); 
$data = fread($fp, $size); 
$data16 = bin2hex($data); 
$data16 = str_replace($search, $replace, $data16); 
$data = pack('H*',$data16); 
header("Content-Type:application/x-shockwave-flash"); 
echo $data; 
?> 

어떻게 Java로 수행합니까?

답변

1

이 시도 :

InputStream in = new FileInputStream("filename"); 
StringBuilder sb = new StringBuilder(); 
byte[] b = new byte[4096]; 
for (int n; (n = in.read(b)) != -1;) { 
    sb.append(new String(b, 0, n)); 
} 
in.close(); 
String data = sb.toString(); 
data = data.replace("foo", "bar"); 
//do whatever you want with data 

내가 (당신의 예에서 사용 된 것과 같은 SWF 파일)이 진정으로 바이너리 데이터로 작업하는 방법을 잘 모르겠어요. 바이너리 데이터는 유니 코드 문자로 해석 될 수 있으며 인쇄하면 다르게 나타납니다. 유효하지 않은 문자 인코딩에 대해 일종의 예외를 던질 수도 있습니다. 바이너리 데이터에 ByteArrayInputStream을 사용하려고하지만 검색/바꾸기가 쉬운 방법이 없습니다.

+0

감사합니다! 문제 해결됨:) – arahaya

관련 문제