android系统中*.bin文件读取时乱码问题

阿军 2013-04-26 02:53:12
大家好,我最近在想通过程序查看android系统中的*.bin文件里的数据信息,我试过用notepad和ue查看软件打开后看到都是乱码。
后来我想通过android程序来读取查看不知是什么原因看到的也全部是些乱码,我的查看方法如下:
从android系统中复制出*.bin文件放到我项目工程中assets文件中,读取代码如下:
private AssetManager am;
private InputStream is;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

readerBin();
}

private void readerBin() {

am = this.getResources().getAssets();
try {
is = am.open("xtra.bin");
if (is != null) {
Log.e("TAG", "It worked!");
}

// *********************方法一***********************
// BufferedReader br = new BufferedReader(new
// InputStreamReader(is,"utf-8"));
//
// String row="",txtStr="";
// while ((row = br.readLine()) != null) {
// txtStr = txtStr + row;
// }
// Log.d("TAG", txtStr);

// ********************方法二************************
// String str=readTextFile(is);
// Log.e("TAG", str);


// ********************方法三************************
String str=convertCodeAndGetText(is);
Log.e("TAG", str);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private String convertCodeAndGetText(InputStream is) {// 转码

// File file = new File(str_filepath);
BufferedReader reader;
String text = "";
try {
// FileReader f_reader = new FileReader(file);
// BufferedReader reader = new BufferedReader(f_reader);
// FileInputStream fis = new FileInputStream(file);
BufferedInputStream in = new BufferedInputStream(is);
in.mark(4);
byte[] first3bytes = new byte[3];
in.read(first3bytes);// 找到文档的前三个字节并自动判断文档类型。
in.reset();
if (first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB&& first3bytes[2] == (byte) 0xBF) {// utf-8

reader = new BufferedReader(new InputStreamReader(in, "utf-8"));
Log.i("TAG", "utf-8");
} else if (first3bytes[0] == (byte) 0xFF
&& first3bytes[1] == (byte) 0xFE) {

reader = new BufferedReader(new InputStreamReader(in, "unicode"));
Log.i("TAG", "unicode");
} else if (first3bytes[0] == (byte) 0xFE&& first3bytes[1] == (byte) 0xFF) {

reader = new BufferedReader(new InputStreamReader(in,"utf-16be"));
Log.i("TAG", "utf-16be");
} else if (first3bytes[0] == (byte) 0xFF&& first3bytes[1] == (byte) 0xFF) {

reader = new BufferedReader(new InputStreamReader(in,"utf-16le"));
Log.i("TAG", "utf-16le");
} else {

reader = new BufferedReader(new InputStreamReader(in, "GBK"));
Log.i("TAG", "GBK");
}
String str = reader.readLine();

while (str != null) {
text = text + str + "\n";
str = reader.readLine();

}
reader.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return text;
}



private String readTextFile(InputStream inputStream) {

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

byte buf[] = new byte[1024];

int len;

try {

while ((len = inputStream.read(buf)) != -1) {

String text = new String(buf, "UTF-8");
Log.i("TAG", text);
outputStream.write(buf, 0, len);

}

outputStream.close();

inputStream.close();

} catch (IOException e) {

}

return outputStream.toString();

}


最后,请各位给个处理方法,如果有Demo代码就理好了,先谢谢了。
...全文
137 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧