javanio问题,乱码,初步判断是因为在循环读取数据中,把一个汉字拆分到这次循环,与下次循环里了,解决办法可以是把数组整成一个大数组,再转成字符串,求大侠们有没有别的招?代码如...
java nio问题,乱码,初步判断是因为 在循环读取数据中,把一个汉字拆分到这次循环,与下次循环里了,解决办法可以是把数组整成一个大数组,再转成字符串,求大侠们有没有别的招?
代码如下:
public static String read(String path){
FileChannel fc = null;
FileInputStream fi = null;
StringBuffer sb = new StringBuffer();
try {
Charset charset = Charset.forName("gbk");
fi = new FileInputStream(path);
fc = fi.getChannel();
ByteBuffer buf = ByteBuffer.allocate(64);//这里缓存区大小,设置的越大,乱码就越少,设置的越小,乱码就越频繁
while(-1 != fc.read(buf)){
buf.flip();
sb.append(charset.decode(buf));
buf.clear();
}
fc.close();
fi.close();
System.out.println(sb);
return sb.toString();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fc!=null)
fc.close();
if(fi!=null)
fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
展开