`

通过read读入到ByteBuffer中后转换成字符的三种做法

 
阅读更多
package com.wjy.nio;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;

public class GetChannel {
	private static final int BSIZE=1024;
	public static void main(String args[]){
		try {
			FileChannel fcChannel=new FileOutputStream(new File("./file/out.txt")).getChannel();
			fcChannel.write(ByteBuffer.wrap("Some text ".getBytes()));
			fcChannel.close();
			
			fcChannel=new FileInputStream(new File("./file/out.txt")).getChannel();
			ByteBuffer buffer=ByteBuffer.allocate(BSIZE);
			fcChannel.read(buffer);
			buffer.flip();
			System.out.println(buffer.asCharBuffer().toString());
//*****************************************************************************************			
			buffer.rewind();    //返回到数据的开始部分
			String encoding=System.getProperty("file.encoding");
System.out.println("Decoded using "+encoding+": "+Charset.forName(encoding).decode(buffer));
//*****************************************************************************************			
fcChannel=new FileOutputStream(new File("./file/out.txt")).getChannel(); 
fcChannel.write(ByteBuffer.wrap("Some text".getBytes("UTF-16BE"))); 
fcChannel.close(); fcChannel=new FileInputStream(new File("./file/out.txt")).getChannel(); buffer.clear(); 
fcChannel.read(buffer); 
buffer.flip(); 
System.out.println(buffer.asCharBuffer());
//*****************************************************************************************			
fcChannel=new FileOutputStream(new File("./file/out.txt")).getChannel(); 
buffer=ByteBuffer.allocate(BSIZE);
buffer.asCharBuffer().put("Some text"); 
fcChannel.write(buffer); 
fcChannel.close(); 
fcChannel=new FileInputStream(new File("./file/out.txt")).getChannel(); 
buffer.clear(); 
fcChannel.read(buffer); 
buffer.flip(); 
System.out.println(buffer.asCharBuffer());
//*****************************************************************************************			

 

} catch (FileNotFoundException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace();
 }
 }
 }

 

运行结果是:

卯浥?數琠
Decoded using GBK: Some text 
Some text
Some text        一堆子空的框框

 

分享到:
评论

相关推荐

    Java NIO系列教材1

    当数据被读入Buffer后,需要调用flip()方法切换Buffer到读取模式。当Buffer中的数据被读取完后,使用clear()方法重置Buffer以接收更多数据。 Java NIO的这一系列特性使得开发者能更有效地管理I/O操作,特别是在高...

    Getting started with new io

    接着,通过调用FileChannel的read方法,将文件中的数据读入到Buffer中。写入操作也类似,只是方向相反,数据从Buffer写入到Channel中。 四、缓冲区内部结构详解 NIO中的Buffer不仅仅是一个简单的容器,它具有复杂...

    java nio.doc

    - `read(ByteBuffer dst)`:将字节序列从此通道读入给定的缓冲区。 - `size()`:返回该通道文件的当前大小。 - `transferFrom(ReadableByteChannel src, long position, long count)`:将字节从给定的可读取字节...

    java NIO详细教程

    Java NIO(New IO)是Java平台提供的一种新的IO操作模式,它首次出现在Java 1.4版本中,并在后续版本中不断完善。Java NIO 的设计目的是为了克服传统Java IO API在面对大量并发连接时存在的性能瓶颈。 ##### 使用...

    JavaNIO[整理].pdf

    - NIO读取文件示例中,使用FileChannel从文件中读取数据,通过`channel.read(buffer)`将数据读入Buffer,而不是直接读到字节数组,这样可以批量读取,提高效率。 ```java public void nioRead(String file) throws...

    JavaNIO.zip_java nio_nio java

    5. **字符集编码与解码**:NIO提供了Charset、CharsetDecoder和CharsetEncoder类,用于处理字符集的转换。 下面是一些关键的Java NIO使用示例: 1. **读取文件**:使用FileChannel从文件中读取数据到缓冲区,然后...

    Using NIO to copy Java file fast.zip_java nio

    4. 当缓冲区填满后,调用flip()方法将缓冲区从写模式切换到读模式。 5. 使用FileChannel的write()方法将缓冲区中的数据写入目标文件。 6. 重复步骤3至5,直到源文件所有数据都被复制。 7. 最后,关闭两个FileChannel...

    java通过url读取文件内容示例

    我们创建了一个`ByteBuffer`,并使用`read()`方法将数据读入缓冲区,然后转换为字符串输出。 在实际应用中,可能还需要处理HTTP响应码、设置超时、处理重定向等问题。同时,考虑到网络请求的异步性,可以考虑使用`...

    java代码-buffer

    - 数据转换:不同数据类型之间的转换,如ByteBuffer用于二进制数据,CharBuffer用于字符数据。 在"main.java"这个文件中,很可能包含了使用Buffer的Java代码示例,通过读取和分析代码,我们可以进一步了解Buffer的...

Global site tag (gtag.js) - Google Analytics