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代码就理好了,先谢谢了。