首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取二进制文件为字符串,在Android Studio (java)中编辑后返回为二进制文件

读取二进制文件为字符串,在Android Studio (java)中编辑后返回为二进制文件
EN

Stack Overflow用户
提问于 2018-08-18 02:36:12
回答 1查看 827关注 0票数 0

我是java新手,我在Android Studio3.1x上编写了一个移动应用。

我需要将二进制文件作为字符串读取。(例如: abc.dll)

需要编辑该字符串的某些部分,然后写回另一个二进制文件。例如: efg.dll

我可以做得很好,但是当我以字符串的形式读取时,字符串看起来不同,并且长度错误。

我知道我可以修补byte[]并将byte[]重写为efg.dll。但出于某种原因,我需要将其转换为字符串,再转换回byte[]并编写efg.dll。

我的伪代码如下:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2018-08-18 03:13:52

不要使用字符串来处理二进制数据。您的二进制查看器可能会以原始ascii呈现文本,这是字符与字节的1对1关系。然而,大多数现代字符集并不遵循这一点。事实上,unicode为每个字符定义了可变的字节数。

如果您确实想这样做,您可以将数组中的每个byte转换为char,并将其提供给String。但是,我建议找到一种只使用byte[],甚至使用ByteBuffer的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51901139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档