标签:java malformedinputexcept bytebuffer filechannel charsetdecoder
java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:260) at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:781) at cn.fuxi.nio.ReadFile.main(ReadFile.java:37)
public class ReadFile { public static void main(String[] args) { FileInputStream fis; try { fis = new FileInputStream("a.txt"); FileChannel channel = fis.getChannel(); // 定义一个ByteBuffer,用于重复读取数据 ByteBuffer byteBuffe = ByteBuffer.allocate(64);// 每次取出64字节 // 将FileChannel的数据放入ByteBuffer中 while (channel.read(byteBuffe) != -1) { // 锁定ByteBuffer的空白区 byteBuffe.flip(); /* 创建Charset对象 */ Charset charset = Charset.forName("GBK"); // 创建解码器 CharsetDecoder charsetDecoder = charset.newDecoder(); // 将ByteBuffer的内容转码 CharBuffer charBuffer = charsetDecoder.decode(byteBuffe); // CharBuffer charBuffer = charset.decode(byteBuffe); System.out.println(charBuffer); // 将ByteBuffer初始化,为下一次读取数据做准备 byteBuffe.clear(); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
This is just test for FileChannel 小心会报异常:java.nio.charset.MalformedInputException: Input length = 1,看到底是什么鬼原因弄成的。
/* 创建Charset对象 */ Charset charset = Charset.forName("GBK"); // 创建解码器 CharsetDecoder charsetDecoder = charset.newDecoder(); // 将ByteBuffer的内容转码 // CharBuffer charBuffer = charsetDecoder.decode(byteBuffe);改为:
/* 创建Charset对象 */ Charset charset = Charset.forName("GBK"); CharBuffer charBuffer = charset.decode(byteBuffe);
This is just test for FileChannel 小心会报异常:java.nio.charset.MalformedInputException: Input length = 1,看到底是什么鬼原因弄成的。 This is just test for FileChannel 小心会报异常:java.nio.charset.MalformedInputException: Input length = 1,看到底? 鞘裁垂碓蚺傻摹?
public class FileChannelTest { public static void main(String[] args) { try { File file=new File("abc.txt"); //以文件输入流FileInputStream创建FileChannel,以控制输入 FileChannel inChannel=new FileInputStream(file).getChannel(); //以文件输出流FileOutputStream创建FileChannel,以控制输出 FileChannel outChannel=new FileOutputStream("a.txt").getChannel(); //将FileChannel里的全部数据映射成ByteBuffer MappedByteBuffer buffer=inChannel.map(FileChannel.MapMode.READ_ONLY, 0, file.length()); //直接将buffer里的数据全部输出 outChannel.write(buffer); //再次调用buffer的clear()方法,复原limit、position的位置 buffer.clear(); //使用GBK字符集来创建解码器 Charset charset=Charset.forName("GBK"); //创建解码器(CharsetDecoder)对象 CharsetDecoder decoder=charset.newDecoder(); //使用解码器将ByteBuffer转换成CharBuffer CharBuffer charBuffer=decoder.decode(buffer); System.out.println(charBuffer); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
我的Java开发学习之旅------>Java NIO 报java.nio.charset.MalformedInputException: Input length = 1异常
标签:java malformedinputexcept bytebuffer filechannel charsetdecoder
原文地址:http://blog.csdn.net/ouyang_peng/article/details/46462379