nio FileChannel中文乱码问题

最近用nio读取文件时,英文正常,读取中文时会出现乱码,经查可以用Charset类来解决:

代码如下:

  1. package com.example.demo;  
  2.   
  3. import java.io.FileNotFoundException;  
  4. import java.io.RandomAccessFile;  
  5. import java.nio.ByteBuffer;  
  6. import java.nio.CharBuffer;  
  7. import java.nio.channels.FileChannel;  
  8. import java.nio.charset.Charset;  
  9. import java.nio.charset.CharsetDecoder;  
  10.   
  11. public class NioDemo {  
  12.     public static void main(String[] args) {  
  13.         try {  
  14.             Charset charset = Charset.forName("GBK");//Java.nio.charset.Charset处理了字符转换问题。它通过构造CharsetEncoder和CharsetDecoder将字符序列转换成字节和逆转换。    
  15.             CharsetDecoder decoder = charset.newDecoder();  
  16.               
  17.             RandomAccessFile raf = new RandomAccessFile("D:\d\test.txt""rw");  
  18.             FileChannel fc = raf.getChannel();  
  19.               
  20.             ByteBuffer buffer = ByteBuffer.allocate(512);   
  21.             CharBuffer cb = CharBuffer.allocate(512  
  22.                     );  
  23.               
  24.             int count = fc.read(buffer);  
  25.             while (count != -1) {   
  26.                 System.out.println("count = "+count);   
  27.                  buffer.flip();  
  28.                  decoder.decode(buffer, cb, false);  
  29.                  cb.flip();  
  30.                  while (cb.hasRemaining()) {  
  31.                         System.out.print(cb.get());  
  32.                     }   
  33.                  System.out.println();  
  34.                 buffer.clear();  
  35.                 cb.clear();  
  36.                 count = fc.read(buffer);  
  37.             }  
  38.             raf.close();  
  39.         } catch (Exception e) {  
  40.             // TODO Auto-generated catch block  
  41.             e.printStackTrace();  
  42.         }  
  43.     }  
  44. }  
test..txt文体如下:

  1. 据英国《每日快报》报道,爱因斯坦提出理论称,通过时间旅行前往未来的一种方式就是在宇宙中以光速旅行。这个广泛接受的理论称,实现时间旅行必须打造一艘能够以光速飞行的太空船,并且进入太空。  
  2.   
  3. 理论物理学家、哥伦比亚大学的briangreene称:“你可以打造出一艘宇宙飞船,进入太空并且以接近光速的速度旅行,转个圈然后回来。设想一下你飞行了六个月,然后掉头再飞六个月回来。”  



运行结果:


原文地址:https://www.cnblogs.com/jpfss/p/8991431.html