• java nio buffer读取数据乱码问题


    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();
            }
        }
      
  • 相关阅读:
    剑指offer(45)扑克牌顺子
    剑指offer(44)单词翻转序列
    剑指offer(43)左旋转字符串
    剑指offer(42)和为S的字符串
    剑指offer(41)和为S的连续正数序列
    剑指offer(40)数组中只出现一次的数字
    剑指offer(39)平衡二叉树
    面试金典——字符串压缩
    LeetCode——恢复二叉搜索树
    LeetCode——修剪二叉搜索树
  • 原文地址:https://www.cnblogs.com/oskyhg/p/7704214.html
Copyright © 2020-2023  润新知