- 浏览: 979931 次
文章分类
- 全部博客 (428)
- Hadoop (2)
- HBase (1)
- ELK (1)
- ActiveMQ (13)
- Kafka (5)
- Redis (14)
- Dubbo (1)
- Memcached (5)
- Netty (56)
- Mina (34)
- NIO (51)
- JUC (53)
- Spring (13)
- Mybatis (17)
- MySQL (21)
- JDBC (12)
- C3P0 (5)
- Tomcat (13)
- SLF4J-log4j (9)
- P6Spy (4)
- Quartz (12)
- Zabbix (7)
- JAVA (9)
- Linux (15)
- HTML (9)
- Lucene (0)
- JS (2)
- WebService (1)
- Maven (4)
- Oracle&MSSQL (14)
- iText (11)
- Development Tools (8)
- UTILS (4)
- LIFE (8)
最新评论
-
Donald_Draper:
Donald_Draper 写道刘落落cici 写道能给我发一 ...
DatagramChannelImpl 解析三(多播) -
Donald_Draper:
刘落落cici 写道能给我发一份这个类的源码吗Datagram ...
DatagramChannelImpl 解析三(多播) -
lyfyouyun:
请问楼主,执行消息发送的时候,报错:Transport sch ...
ActiveMQ连接工厂、连接详解 -
ezlhq:
关于 PollArrayWrapper 状态含义猜测:参考 S ...
WindowsSelectorImpl解析一(FdMap,PollArrayWrapper) -
flyfeifei66:
打算使用xmemcache作为memcache的客户端,由于x ...
Memcached分布式客户端(Xmemcached)
前面我们看过socket通道,datagram通道,以管道Pipe,从今天起,我们来看一下file通道,先从一个示例开始:
测试主类1:
按一下三步执行:
1.先屏蔽writeBytes,执行readBytes,从文件中读取数据
2.再屏蔽readBytes,执行writeBytes,向文件中写数据
3.最后屏蔽writeBytes,执行readBytes,从文件中读取数据
相应的控制台输出为:
1.=====Read byte length:0
2.===已经写完数据到文件
3.=====Read byte length:44
new String to write to file....1494407798722
测试主类2:
控制输出:
===将源通道的数据传输的本通道完毕
===将本通道数据传输到目的通道完毕
打开文件E:/nio_data_to.txt和E:/nio_data_to2.txt,文件内容如下:
new String to write to file....1494407798722
测试主类1:
package nio.filechannel; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; /** * 测试FileChannel * @author donald * 2017年4月9日 * 下午4:16:35 */ public class testFileChannel { public static void main(String[] args) throws IOException { RandomAccessFile aFile = new RandomAccessFile("E:/nio_data.txt", "rw"); FileChannel inChannel = aFile.getChannel(); ByteBuffer buf = ByteBuffer.allocate(1024); /* * 1.先屏蔽writeBytes,执行readBytes,从文件中读取数据 * 2.再屏蔽readBytes,执行writeBytes,向文件中写数据 * 3.最后屏蔽writeBytes,执行readBytes,从文件中读取数据 */ // writeBytes(buf, inChannel); readBytes(buf, inChannel); inChannel.close(); aFile.close(); } private static void writeBytes(ByteBuffer buf, FileChannel fileChannel) throws IOException{ String newData = "new String to write to file...."+System.currentTimeMillis(); buf.put(newData.getBytes("UTF-8")); buf.flip(); while(buf.hasRemaining()) fileChannel.write(buf); System.out.println("===已经写完数据到文件"); } private static void readBytes(ByteBuffer buf, FileChannel fileChannel) throws IOException{ buf.clear(); //从file通道读取数据到缓存区,即写入缓冲区 int bytesRead = fileChannel.read(buf); while (bytesRead != -1) { // buf.compact();//将未读完的数据移到缓冲的前面,新写入的数据,将会append旧数据的后面 bytesRead = fileChannel.read(buf); } //转换缓冲区模式 buf.flip();// swith the mode write or read System.out.println("=====Read byte length:" + buf.limit()); while (buf.hasRemaining()) { System.out.print((char) buf.get()); } System.out.println(); } }
按一下三步执行:
1.先屏蔽writeBytes,执行readBytes,从文件中读取数据
2.再屏蔽readBytes,执行writeBytes,向文件中写数据
3.最后屏蔽writeBytes,执行readBytes,从文件中读取数据
相应的控制台输出为:
1.=====Read byte length:0
2.===已经写完数据到文件
3.=====Read byte length:44
new String to write to file....1494407798722
测试主类2:
package nio.filechannel; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; /** * 测试通道间传输 * @author donald * 2017年4月9日 * 下午10:27:16 */ public class testTransferChannel { public static void main(String[] args) throws IOException { RandomAccessFile fromFile = new RandomAccessFile("E:/nio_data.txt", "rw"); FileChannel fromChannel = fromFile.getChannel(); RandomAccessFile toFile = new RandomAccessFile("E:/nio_data_to.txt", "rw"); FileChannel toChannel = toFile.getChannel(); RandomAccessFile to2File = new RandomAccessFile("E:/nio_data_to2.txt", "rw"); FileChannel to2Channel = to2File.getChannel(); long position = 0; long count = fromChannel.size(); //将源通道的数据传输的本通道 toChannel.transferFrom(fromChannel, position, count); System.out.println("===将源通道的数据传输的本通道完毕"); //将本通道数据传输到目的通道 fromChannel.transferTo(position, count, to2Channel); System.out.println("===将本通道数据传输到目的通道完毕"); fromChannel.close(); fromFile.close(); toChannel.close(); toFile.close(); to2Channel.close(); to2File.close(); } }
控制输出:
===将源通道的数据传输的本通道完毕
===将本通道数据传输到目的通道完毕
打开文件E:/nio_data_to.txt和E:/nio_data_to2.txt,文件内容如下:
new String to write to file....1494407798722
发表评论
-
文件通道解析二(文件锁,关闭通道)
2017-05-16 23:17 1064文件通道解析一(读写操作,通道数据传输等):http://do ... -
文件通道解析一(读写操作,通道数据传输等)
2017-05-16 10:04 1164Reference定义(PhantomRefere ... -
文件通道创建方式综述
2017-05-15 17:39 1065Reference定义(PhantomReference,Cl ... -
文件读写方式简单综述后续(文件,流构造)
2017-05-14 23:04 1480Java Socket通信实例:http://donald-d ... -
文件读写方式简单综述
2017-05-14 11:13 1135Java Socket通信实例:http://donald-d ... -
FileChanne定义
2017-05-12 23:28 936文件读写方式简单综述:http://donald-draper ... -
SeekableByteChannel接口定义
2017-05-11 08:43 1234ByteChannel,分散聚集通道接口的定义(SocketC ... -
PipeImpl解析
2017-05-11 08:41 932ServerSocketChannel定义:http://do ... -
Pipe定义
2017-05-10 09:07 903Channel接口定义:http://donald-drape ... -
NIO-Pipe示例
2017-05-10 08:47 905PipeImpl解析:http://donald-draper ... -
DatagramChannelImpl 解析四(地址绑定,关闭通道等)
2017-05-10 08:27 776DatagramChannelImpl 解析一(初始化):ht ... -
DatagramChannelImpl 解析三(多播)
2017-05-10 08:20 1893DatagramChannelImpl 解析一(初始化):ht ... -
NIO-UDP实例
2017-05-09 12:32 1584DatagramChannelImpl 解析一(初始化):ht ... -
DatagramChannelImpl 解析二(报文发送与接收)
2017-05-09 09:03 1405DatagramChannelImpl 解析一(初始化):ht ... -
DatagramChannelImpl 解析一(初始化)
2017-05-08 21:52 1406Channel接口定义:http://donald-drape ... -
MembershipKeyImpl 简介
2017-05-08 09:11 922MembershipKey定义:http://donald-d ... -
DatagramChannel定义
2017-05-07 23:13 1227Channel接口定义:http://donald-drape ... -
MulticastChanne接口定义
2017-05-07 13:45 1136NetworkChannel接口定义:ht ... -
MembershipKey定义
2017-05-06 16:20 915package java.nio.channels; i ... -
SocketChannelImpl 解析四(关闭通道等)
2017-05-05 08:38 2530SocketChannelImpl 解析一(通道连接,发送数据 ...
相关推荐
1. **文件读写示例**:演示如何使用FileChannel进行文件的读取和写入,可能会包含`transferTo()`和`transferFrom()`等方法的使用。 2. **网络通信示例**:展示如何使用SocketChannel和ServerSocketChannel进行客户端...
例如,FileChannel、SocketChannel和DatagramChannel是常用的通道类型。 2. **缓冲区(Buffer)**:缓冲区是NIO的核心,它在内存中分配一块区域来存储数据。在进行IO操作时,数据先被存入缓冲区,然后再从缓冲区读取...
常见的通道类有FileChannel、SocketChannel、ServerSocketChannel等。例如,ServerSocketChannel用于监听客户端连接,SocketChannel用于接收和发送数据。 2. **缓冲区(Buffers)**:缓冲区是存储数据的容器,它...
这个名为"nioSamples"的压缩包文件很可能包含了以上概念的Java代码示例,你可以通过学习和运行这些示例,更深入地理解Java NIO的工作原理和使用方法。对于Java初学者来说,这是一个极好的实践资源,可以帮助你快速...
在“Multi_thread_Download”示例中,开发者可能使用了`OkHttp`或者`Volley`这样的网络库来发起HTTP请求,利用`java.nio`包中的`FileChannel`进行文件的读写和合并,以及`SharedPreferences`存储下载状态。...
示例代码展示如何使用 `FileChannel` 的 `map()` 方法进行内存映射: ```java FileChannel fileChannel = ...; MappedByteBuffer mappedBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, fileChannel....
本示例主要关注如何高效地传输大文件,通过将大文件分解为较小的数据块,然后逐个传输这些小块,最后在接收端进行组装。这种方法可以有效避免一次性加载整个大文件到内存中导致的资源消耗和可能的溢出问题。 首先,...
"Java使用BIO和NIO进行文件操作对比代码示例" Java BIO和NIO是两种不同的输入/输出(IO)模型,在文件操作中发挥着重要作用。BIO(Blocking I/O)是一种同步阻塞IO模式,而NIO(Non-Blocking I/O)是一种同步非阻塞...
- **主要内容**:具体讲解FileChannel的使用方法,并提供示例代码。 - **学习目标**:学会如何利用FileChannel进行文件读写操作。 #### 5. Java NIO-Channel-FileChannel详解(一) - **主要内容**:深入探讨...
这一示例演示了使用Java NIO的FileChannel类来读取文件的基本流程。 在介绍完Java NIO的基础概念后,文档通过代码示例加深了对NIO使用方法的理解。如ChannelDemo.java展示了一个简单的文件读取操作,其中使用了...
Java NIO提供了多种类型的通道,如FileChannel用于文件操作,SocketChannel用于网络通信,DatagramChannel用于UDP通信等。通道可以同时进行读写操作,并且可以与多个缓冲区进行交互。 2. **缓冲区(Buffer)**: ...
示例代码中演示了如何使用`ByteBuffer`和`FileChannel`读取文件: ```java int bufSize = 1024; byte[] bs = new byte[bufSize]; ByteBuffer byteBuf = ByteBuffer.allocate(1024); FileChannel channel = new ...
Java NIO(New IO)是Java 1.4版本引入的一种新的I/O API,它提供了非阻塞的I/O操作,极大地提高了I/O操作的效率。...此外,NIO还有Buffer、Pipe、FileChannel等重要概念,它们共同构建了Java NIO的强大功能。
1. **FileChannel**:`java.nio.channels.FileChannel`是用于读写文件的通道,可以从一个文件通道向另一个文件通道直接传输数据,避免了中间缓冲区的开销。在文件复制中,我们通常使用`transferTo()`和`transferFrom...
FileChannel inChannel = FileChannel.open(Paths.get(sourcePath), StandardOpenOption.READ); FileChannel outChannel = FileChannel.open(Paths.get(destPath), StandardOpenOption.WRITE); ByteBuffer ...
示例代码片段 ```java Selector selector = Selector.open(); ServerSocketChannel server = ServerSocketChannel.open().bind(new InetSocketAddress(8080)); server.configureBlocking(false); server.register...
Java NIO(New Input/Output)提供了一种新的文件操作方式,`FileChannel`类允许通过通道直接进行文件操作,这通常比传统的流更快。尽管如此,`File`类在NIO中仍然扮演着基础角色,用来创建通道。 10. **并发访问*...
01-Java NIO-课程简介.mp4 05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 08-Java NIO-Channel-...23-Java NIO-Selector-示例代码(客户端).mp4 24
本文将详细介绍四种常见的Java文件复制方法:使用`FileStreams`、使用`FileChannel`、使用Apache `Commons IO`以及使用Java 7的`Files`类。 #### 1. 使用`FileStreams`复制文件 这种方法是最传统的文件复制手段,...