j2me读取txt文件,分段问题

神马程序员 2011-03-23 02:27:48
我做的是一个阅读器,读取文本文件我采取的做法是,
1. 打开文件流之后, 获取文本文件总共字节长度;
2, 分页读取, 每次读取固定大小的字节数组, 做当前读取位置的标记;
3, 需要翻页或者跳转的时候, 再到所做的标记处去读取相应长度的字节;
4, 将字节数组转化为字符串.

问题就出在第二步, 不同的编码格式, 单个中文字符所占的字节不同, 比如GBK是2个字节, 这样, 在现实文本的时候, 经常最后一个字符显示为乱码"口", 下一页的前面几个字符也显示为乱码, 遇到英文或者换行符后, 才又正常显示.之前遇到这个问题, 没有很好的解决, 放下做其他部分, 现在也没什么好的解决办法,请教各位.
...全文
255 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
神马程序员 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 magong 的回复:]
引用 7 楼 paul630 的回复:

问题都不是编码的事...

InputStreamReader可以指定字符集,如果发生了将一个中文识别为两个英文字符的情况,可以找Oracle打官司去。
呵呵。
[/Quote]不是这个意思,兄弟,我的问题不在于指定字符集...
举例:
byte[] data = new byte[1024];
String str = new String(data, "GBK");
System.out.println(str);
那么打印出来的最后一个字符有可能是乱码...
因为长度被我固定了, 如果字符转化中含有英文的话有一半的机会会如此...
magong 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 paul630 的回复:]

我要的目的是每页显示的字符数量固定.

byte[] data = new byte[1024];
String str = new String(data, "GBK");
System.out.println(str);
[/Quote]
你可以判断最后一个字符是否是合法的GBK字符,若不是则再多读下一个字节进来,或舍弃最后一个字符。
这样判断最后一个字符是乱码:
char last = str.charAt(str.length()-1);
if (last==0xFFFD) {
//最后一个字符(也就是字节)是乱码(半个汉字),处理之
}
magong 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 paul630 的回复:]

问题都不是编码的事...
[/Quote]
InputStreamReader可以指定字符集,如果发生了将一个中文识别为两个英文字符的情况,可以找Oracle打官司去。
呵呵。
神马程序员 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 magong 的回复:]
不要用InputStream,用Reader来读文件吧,字符编码的问题交给JVM去烦好了。
[/Quote]问题都不是编码的事...没看清我的提问,还是我说的有歧义,我已经把字节给提取出来了,问题是有些编码是gbk,两个字节是一个中文,如果字节里面包含了英文,那么有可能我的最后一个字符显示出来的是乱码.
按行读 不想这么做 我要的目的是每页显示的字符数量固定.
Dongo2 2011-03-23
  • 打赏
  • 举报
回复
其实你还可以行一行的读取
Dongo2 2011-03-23
  • 打赏
  • 举报
回复
同意magong 用reader 把那样就可以解决了
  • 打赏
  • 举报
回复
这样需要注意读取速度问题,把数值传递中的字节做一个限制,然后把字节读入一个字节数组中!
magong 2011-03-23
  • 打赏
  • 举报
回复
不要用InputStream,用Reader来读文件吧,字符编码的问题交给JVM去烦好了。
神马程序员 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 scliuqiang 的回复:]
文件会不会很大,如果不是很大
直接全部读出来,然后再做分页处理
[/Quote]用户用手机阅读, 我不知道他的文件大小, 分段处理比较稳妥.
scliuqiang 2011-03-23
  • 打赏
  • 举报
回复
文件会不会很大,如果不是很大
直接全部读出来,然后再做分页处理

13,100

社区成员

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

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