我是java新手,我在Android Studio3.1x上编写了一个移动应用。
我需要将二进制文件作为字符串读取。(例如: abc.dll)
需要编辑该字符串的某些部分,然后写回另一个二进制文件。例如: efg.dll
我可以做得很好,但是当我以字符串的形式读取时,字符串看起来不同,并且长度错误。
我知道我可以修补byte[]并将byte[]重写为efg.dll。但出于某种原因,我需要将其转换为字符串,再转换回byte[]并编写efg.dll。
我的伪代码如下:
String FileBuffer ="";
int FileLength = 0;
//I store abc.dll inside raw folder
InputStream ipsSysTemplate = getResources().openRawResource(R.raw.abc);
FileLength = ipsSysTemplate.available();
byte[] buf = new byte[FileLength];
ipsSysTemplate.read(buf);
ipsSysTemplate.close();
FileBuffer = new String(buf);
//I even tried many Charset like "UTF-8", "windows-1252" etc...
//FileBuffer = new String(buf,"UTF-8");
//I need both length must be same, but I get different
System.out.println(FileLength + " " + FileBuffer.length());
//Finally I write a new binary file efg.dll from below code
File file = new File(/storage/emulated/0/Download/efg.dll);
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
fos.write(FileBuffer.getBytes());
fos.close();
当我在Windows7上的Eclipse中执行类似的代码时,我得到了预期的结果。但在这种情况下,我将我的模板abc.dll放在硬盘上。
我不知道问题出在哪里,我需要知道更多……关于java或Android mobile的概念。
能不能请一些专家理解我的问题,给我一个简单的解决方案?
这就是两个文件对我的代码的处理方式。please have a look at this image
先谢谢你...
gaamaa
发布于 2018-08-18 03:13:52
不要使用字符串来处理二进制数据。您的二进制查看器可能会以原始ascii呈现文本,这是字符与字节的1对1关系。然而,大多数现代字符集并不遵循这一点。事实上,unicode为每个字符定义了可变的字节数。
如果您确实想这样做,您可以将数组中的每个byte
转换为char
,并将其提供给String。但是,我建议找到一种只使用byte[]
,甚至使用ByteBuffer
的方法。
https://stackoverflow.com/questions/51901139
复制相似问题