`
NanguoCoffee
  • 浏览: 49858 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RandomAccessFile.readLine()读取文件乱码

阅读更多

RandomAccessFile.readLine(): 很有可能会产生乱码。因为它是每读取一个byte就将其转化为char,再将char拼接称为String。对于一个中文,就需要2个byte或者多个byte来表示(不同的编码采用的byte数目不一样),假设为3个byte,那么raf.readLine()则将该中文视为单独的3个char。

应当使用

知道该行的开始和该行的结束(即在两个‘\n’)的指针位置。

通过raf.read(byte[] bs), new String(bs)的方式来获得字符串。

 

分享到:
评论
2 楼 NanguoCoffee 2011-02-15  
见原文:
引用

应当使用
知道该行的开始和该行的结束(即在两个‘\n’)的指针位置。
通过raf.read(byte[] bs), new String(bs)的方式来获得字符串

去换行符之间的字节数组不会少的,按正确的编码来转换是不会出现乱码。

public final String readLine() throws IOException {
StringBuffer input = new StringBuffer();
int c = -1;
boolean eol = false;

while (!eol) {
    switch (c = read()) {
    case -1:
    case '\n':
eol = true;
break;
    case '\r':
eol = true;
long cur = getFilePointer();
if ((read()) != '\n') {
    seek(cur);
}
break;
    default:
input.append((char)c);
break;
    }
}



yuzhu223 写道
按照楼主说的方式,用
raf.read(byte[] b)
读取文件的数据,读出来的全是数字,这些数字有整数,有负数,跟乱码也没什么区别啊

1 楼 yuzhu223 2011-02-14  
按照楼主说的方式,用
raf.read(byte[] b)
读取文件的数据,读出来的全是数字,这些数字有整数,有负数,跟乱码也没什么区别啊

相关推荐

Global site tag (gtag.js) - Google Analytics