package com.ls.java.newio;
import java.nio.ByteBuffer;
public class TestSlice {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(10);
for(int i=0; i<buffer.capacity(); ++i)
buffer.put((byte) i);
buffer.position(0);
buffer.limit(buffer.capacity());
while(buffer.remaining()>0)
System.out.print(buffer.get() + "---");
System.out.println("============================");
buffer.position(3);
buffer.limit(7);
ByteBuffer slice = buffer.slice();
for(int i=0; i<slice.capacity(); ++i)
slice.put(i, (byte) (slice.get(i) * 5));
while(slice.remaining()>0)
System.out.print(slice.get() + "---");
System.out.println("============================");
buffer.position(0);
buffer.limit(buffer.capacity());
while(buffer.remaining()>0)
System.out.print(buffer.get() + "---");
}
}
分享到:
相关推荐
NIO的核心组件包括Buffer(缓冲区)和Channel(通道),它们共同解决了传统I/O模型中的一些性能瓶颈。 1. **Buffer(缓冲区)**: - 缓冲区是NIO中的核心概念,它是一个对象,包含了存储数据的内存块。Buffer有...
通过Buffer的duplicate()、slice()和get()、put()方法,NIO允许通道间的直接数据传输,无需通过临时缓冲区。 8. 套接字通道(Socket Channels) SocketChannel提供了TCP协议的非阻塞套接字操作,可以用于客户端和...
- `slice()`:返回当前缓冲区的一个视图,从当前位置开始。 5. **特殊缓冲区**: - **直接缓冲区**:通过 `allocateDirect()` 创建,数据直接存放在操作系统内核中,绕过 JVM 的堆,从而提高 I/O 效率。 - **间接...
`slice()`方法创建Buffer的一个视图。 - **字符编码**:在处理文本数据时,需要考虑字符编码问题,如UTF-8等。 - **流(TCP)信道详解**:TCP通道支持非阻塞读写操作,可以使用`read()`和`write()`方法与Buffer...
3. **Buffer**:基于Slice的缓冲区,提供了一套类似于Java NIO的Buffer接口,方便数据的读写操作。 4. **MemoryRegion**:封装了内存区域,提供了一种安全的方式访问和操作堆外内存,避免内存溢出等问题。 5. **...
ByteBuffer subBuffer = buffer.slice(); // 创建子缓冲区,它共享父缓冲区的数据 ``` 从提供的压缩包文件名列表来看,这似乎是一个包含多个Java类的项目。例如,`Server.java`可能是服务器端的代码,`Client.java`...
- **Buffer透视:duplicate(),slice()等**:这些方法提供了不同的视图来查看同一个`Buffer`的内容。 - **字符编码**:处理文本数据时,需要考虑字符编码问题。 - **流(TCP)信道详解**:描述如何使用`...
- **Buffer透视:duplicate(),slice()等**:创建Buffer的副本和切片。 - **字符编码**:处理Unicode和其他字符集。 - **流(TCP)信道详解**:详细介绍TCP Channel的工作原理。 - **Selector详解**: - **在信道...
- **Buffer透视:duplicate(),slice()等** Buffer的操作方法。 - **字符编码** 字符编码的处理方式。 - **流(TCP)信道详解** TCP信道的具体使用方法。 - **Selector详解** - **在信道中注册** 如何...
5. Netty的零拷贝:Netty通过组合NIO的FileChannel.transferTo()和Buffer的slice()、duplicate()方法,实现了数据传输过程中的零拷贝,减少了CPU对数据的处理次数,提高了整体性能。 6. Netty的Pipeline和Handler:...
7. **缓冲区复制与转换**:Java还提供了方便的缓冲区复制和类型转换方法,如`Buffer.slice()`、`Buffer.compact()`和`Buffer.asXXXBuffer()`,帮助在不同类型的缓冲区之间转换。 8. **内存映射文件...
Netty 是基于 Java NIO(非阻塞I/O)构建的,它简化了网络编程的复杂性,提供了高效的内存管理,包括零拷贝(Zero-Copy)技术,能够极大地提高网络通信效率。Netty 提供了一整套的API,包括用于读写数据的Channel、...
ByteBuffer是Java NIO(Non-Blocking I/O)的一部分,允许开发者高效地读写大量原始字节,如处理图像、音频或网络数据。本文将深入探讨Android中ByteBuffer的工作原理及其常见应用场景。 一、ByteBuffer的基础概念 ...
- **DirectBuffer** 和 **HeapBuffer**: 分别对应于堆外内存和堆内内存,根据需求选择最佳性能方案。 - **.slice()**、**duplicate()** 和 **slice(int, int)**: 提供了灵活的数据视图操作。 3. **编码器和解码器...