Как переписать двоичные данные в Java - PullRequest
2 голосов
/ 24 марта 2010

Я пытаюсь выяснить, как заменить двоичные данные с помощью Java. ниже приведен пример замены «foo» на «bar» в SWF-файле на 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 Ответ

1 голос
/ 24 марта 2010

Попробуйте это:

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 для двоичных данных, но тогда у вас нет простых способов поиска / замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...