读取一个文件存进一个字符串里遇到的问题

CHZiroy 2012-09-15 10:58:58
/*
* 用RandomAccessFile将一个文件读取出来保存进一个字符串里
* inputPath是文件的路径
* 函数返回为读取出来的字符串
*/
public static String class2String(String inputPath) throws Exception{
String content = null;
RandomAccessFile file = new RandomAccessFile(inputPath,"r");
//类文件大小要在Integer.MAX_VALUE之内
System.out.println(file.length());
byte[] bytes = new byte[(int) file.length()];
System.out.println(" 字节数组的长度 " +bytes.length);
int flag = 0;
flag = file.read(bytes);
System.out.println("将class文件读进字节数组后,数组的长度 " +bytes.length);
content = new String(bytes);
System.out.println("将字节数组转化为字符串后,字符串的长度 " +content.length());
return content;
}

用上面的方式,将文件的内容读取出来,存进一个字符串
当传进来的是一个.txt之类的字符文件,则结果正常
当传进来的是一个.class的字节文件时,读取到的字符串就有问题
比如这个函数里面插进去的几条测试输出(我传进去一个.class字节文件)
-------
字节数组的长度 1732
将class文件读进字节数组后,数组的长度 1732
将字节数组转化为字符串后,字符串的长度 1653
为什么每次字符串长度都变短了,我用其他流方式也会遇到这个问题????
...全文
83 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
foxpeter 2012-09-15
  • 打赏
  • 举报
回复
content = new String(bytes);

这里默认会按照当前的字符集(也就是gbk)对字节数组进行解码

可能会把两个连续的字节解码成一个gbk中的中文字符


txt文件本来就是保存的gbk字符 所有解码出来也是对的
Mr_sunboy 2012-09-15
  • 打赏
  • 举报
回复
LZ的文本文件里面肯定有中文字吧,一个中文字算2个字节,但转换成字符之后,一个字就算一个长度拉,所以会有LZ所遇到的问题,其实这不是一个问题拉..

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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