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 一堆子空的框框
相关推荐
当数据被读入Buffer后,需要调用flip()方法切换Buffer到读取模式。当Buffer中的数据被读取完后,使用clear()方法重置Buffer以接收更多数据。 Java NIO的这一系列特性使得开发者能更有效地管理I/O操作,特别是在高...
接着,通过调用FileChannel的read方法,将文件中的数据读入到Buffer中。写入操作也类似,只是方向相反,数据从Buffer写入到Channel中。 四、缓冲区内部结构详解 NIO中的Buffer不仅仅是一个简单的容器,它具有复杂...
- `read(ByteBuffer dst)`:将字节序列从此通道读入给定的缓冲区。 - `size()`:返回该通道文件的当前大小。 - `transferFrom(ReadableByteChannel src, long position, long count)`:将字节从给定的可读取字节...
Java NIO(New IO)是Java平台提供的一种新的IO操作模式,它首次出现在Java 1.4版本中,并在后续版本中不断完善。Java NIO 的设计目的是为了克服传统Java IO API在面对大量并发连接时存在的性能瓶颈。 ##### 使用...
- NIO读取文件示例中,使用FileChannel从文件中读取数据,通过`channel.read(buffer)`将数据读入Buffer,而不是直接读到字节数组,这样可以批量读取,提高效率。 ```java public void nioRead(String file) throws...
5. **字符集编码与解码**:NIO提供了Charset、CharsetDecoder和CharsetEncoder类,用于处理字符集的转换。 下面是一些关键的Java NIO使用示例: 1. **读取文件**:使用FileChannel从文件中读取数据到缓冲区,然后...
4. 当缓冲区填满后,调用flip()方法将缓冲区从写模式切换到读模式。 5. 使用FileChannel的write()方法将缓冲区中的数据写入目标文件。 6. 重复步骤3至5,直到源文件所有数据都被复制。 7. 最后,关闭两个FileChannel...
我们创建了一个`ByteBuffer`,并使用`read()`方法将数据读入缓冲区,然后转换为字符串输出。 在实际应用中,可能还需要处理HTTP响应码、设置超时、处理重定向等问题。同时,考虑到网络请求的异步性,可以考虑使用`...
- 数据转换:不同数据类型之间的转换,如ByteBuffer用于二进制数据,CharBuffer用于字符数据。 在"main.java"这个文件中,很可能包含了使用Buffer的Java代码示例,通过读取和分析代码,我们可以进一步了解Buffer的...