public static void main(String[] args) throws IOException { String charsetName = "GBK"; String fileName = "data.txt"; bufferToTxt(charsetName, fileName); txtToBuffer(charsetName, fileName); } public static void txtToBuffer(String charsetName, String fileName) { try { RandomAccessFile file = new RandomAccessFile(fileName, "rw"); FileChannel fileChannel = file.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); int count = fileChannel.read(buffer); while (count != -1) { buffer.flip(); CharBuffer charBuffer = CharBuffer.allocate(1024); Charset charset = Charset.forName(charsetName); CharsetDecoder decoder = charset.newDecoder(); decoder.decode(buffer, charBuffer, true); charBuffer.flip(); while (charBuffer.hasRemaining()){ System.out.print(charBuffer.get()); } buffer.clear(); count = fileChannel.read(buffer); } fileChannel.close(); file.close(); } catch (Exception e) { e.printStackTrace(); } } public static void bufferToTxt(String charsetName, String fileName){ try { RandomAccessFile file = new RandomAccessFile(fileName, "rw"); FileChannel fileChannel = file.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.put("世界如此美妙! good luck".getBytes(charsetName)); buffer.flip(); fileChannel.write(buffer); fileChannel.close(); file.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }