指定编码器、解码器,并且利用ByteBuffer读写文件。
做个例子,以后编写程序的时候使用。
package cxz.net;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
public class TryByteBuffer {
String url = "D:\\workspace\\target";
public static void main(String[] args) throws IOException {
// new TryMappedByteBuffer().write();
new TryMappedByteBuffer().read();
}
private void read() throws IOException {
Charset chrst = Charset.forName("UTF-16");
File f = new File(url);
FileChannel readChannel = new FileInputStream(f).getChannel();
ByteBuffer reader = ByteBuffer.allocate(1024 * 1024);
readChannel.read(reader);
reader.flip();//You need call this method befor decode~
CharBuffer charReader = chrst.decode(reader);
System.out.println("value=" + charReader.toString());
}
private void write() throws IOException {
Charset chrst = Charset.forName("UTF-16");
ByteBuffer writer = chrst.encode("Hi ~ This is a test String");
File f = new File(url);
// System.out.println(f.exists());
FileChannel writeChannel = new FileOutputStream(f, false).getChannel();
writeChannel.write(writer);
writeChannel.close();
}
}
分享到:
相关推荐
- 编解码器是mina中的核心组件,分为编码器(Encoder)和解码器(Decoder)两部分,分别处理数据的编码和解码过程。 - 编码器将应用对象转化为ByteBuffer,以便于网络传输;解码器则将接收到的ByteBuffer还原为...
编码器将应用层对象转换为字节流,解码器则将字节流转换回应用层对象。 **ChannelHandler和ChannelPipeline** ChannelHandler是Netty中的处理逻辑组件,负责处理I/O事件或拦截数据传输。每个Handler都有一个特定的...
2. **InputStreamReader 和 OutputStreamWriter**:当读写文件时,应该使用这两个类来处理字符流,它们允许我们指定具体的字符编码。例如: ```java FileInputStream fis = new FileInputStream(file); ...
传统的视频解码通常涉及读取磁盘上的文件,然后通过解码器将二进制数据转化为可播放的视频帧。然而,这种方式并不适用于所有情况,尤其是那些需要实时处理或在网络中传输的数据。`ByteChannel`是Java NIO(非阻塞I/O...
总之,Netty通过高效的NIO模型、丰富的编解码器、灵活的线程管理和强大的异常处理能力,为企业级应用提供了稳定、高性能的网络通信解决方案。学习Netty,不仅能提升网络编程技能,也能为开发高效分布式系统打下坚实...
在本文中,我们将深入探讨 Netty 的核心概念、如何使用它来实现自定义报文格式的解码器和编码器,以及如何在实际的网络编程中应用这些技术。 1. **Netty 框架概述** Netty 是基于 Java NIO(非阻塞I/O)构建的,...
编码器将消息编码为 ByteBuf,服务器接收后,解码器将其还原回原始消息,然后通过反向的编码/解码过程将消息回传给客户端。 此外,Netty 提供了丰富的协议支持,如 HTTP、FTP、TCP、UDP 等,使得开发者可以轻松地...
在读写过程中,可以使用`Charset`类进行字符编码和解码,确保跨平台的文本一致性。 2. **二进制文件传输**: 二进制文件传输涉及到图像、音频、视频等非文本数据。在NIO中,`FileChannel`允许直接读写磁盘文件,...
4. **编码与解码**:NIO提供了编码和解码工具,如Charset类用于字符编码转换,而ByteBuffer和CharBuffer之间的转换则可以通过CharsetEncoder和CharsetDecoder实现。 5. **文件系统操作**:NIO提供FileChannel,可以...
4. **编码和解码**:Netty的编码器和解码器可以将复杂的数据结构转换为字节流,反之亦然,简化了数据在网络中的传输。 5. **事件驱动**:Netty使用事件驱动模型,当网络事件发生时,相关的处理器会被调用,降低了...
6. **编码和解码器**:Netty提供了多种编码器和解码器,如StringDecoder和StringEncoder,用于将字符串与字节流之间的转换,以及protobuf等复杂协议的编解码器。 7. **零拷贝(Zero-Copy)**:Netty通过Direct...
例如,我们可以使用`Charset.forName("GBK")`获取GBK字符集,然后创建对应的解码器和编码器。 为了实现一个中文过滤器,我们可以创建一个继承自`java.io.FilterInputStream`或`java.io.FilterOutputStream`的类。这...
例如,如果你需要支持一种新的协议,可以参考已有的协议处理器来编写新的编码器和解码器。 最后,学习Netty源码不仅可以帮助你深入理解网络编程,还能提升你在并发、内存管理、性能优化等方面的技术水平。对于Java...
4. **Pipeline**: 事件处理链,允许我们定义自定义的处理器,对进来的数据进行解码、处理,然后编码后发送出去。 5. **Handler**: 处理器接口,用户自定义逻辑实现的地方,可以处理各种事件如连接建立、数据接收、...
2. **通道初始化(ChannelInitializer)**:在初始化器中,我们添加所需的处理器到通道管道,如解码器、编码器和业务处理器。 3. **连接处理**:当客户端连接到服务器时,会触发ChannelActive事件,我们可以在这个...
6. **字符集转换(Charset)**:NIO提供了一套完善的字符集转换机制,可以方便地进行字符编码和解码。 学习NIO,首先要理解如何创建和使用通道、缓冲区以及选择器。例如,通过`FileChannel`打开文件,然后使用`...
在Java NIO中有几个核心概念,包括缓冲区(Buffers)、通道(Channels)、选择器(Selectors)以及NIO中使用的字符编码和解码器。 缓冲区(Buffers):在Java NIO中,数据被读入或写出到通道时,数据必须先进入缓冲...
5. **编码器和解码器**: 在Pipeline中,编码器负责将应用程序对象转换为字节流,以便在网络上传输;解码器则负责将接收到的字节流还原为应用程序对象。例如,HttpObjectDecoder用于解码HTTP请求,而StringDecoder...
Charset类是用于字符编码和解码的,它支持UNICODE字符串与字节序列之间的转换。在处理文本文件或网络通信时,Charset的使用确保了字符集的正确处理。 Selector是NIO中实现非阻塞I/O的关键,它可以监控多个Channel的...
编码器如StringEncoder将字符串编码为ByteBuf,ByteToMessageDecoder和MessageToByteEncoder是自定义解码器和编码器的基础类。 6. **心跳机制**: 在长连接中,Netty支持心跳机制来检测并处理空闲连接或断开的连接...