如何用Java重写二进制数据

时间:2010-03-24 03:18:50

标签: java

我正在试图弄清楚如何使用Java替换二进制数据。 下面是一个从swf文件中将“foo”替换为“bar”的PHP示例。

<?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 个答案:

答案 0 :(得分: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文件)有多好。二进制数据可能会被解释为Unicode字符,如果打印它们将会以不同的方式显示。它也可能会为无效的字符编码抛出某种异常。您可能希望对二进制数据使用ByteArrayInputStream,但是您没有简单的方法来进行搜索/替换。