如何用Java重写二进制数据

如何用Java重写二进制数据,java,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_re

我试图找出如何使用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中实现这一点。

尝试以下方法:

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,但这样做并不容易