Netty是个值得花时间学习的框架,即使一个不起眼的程序,都有值得深入学习的地方。比如:io.netty.util.internal.PlatformDependent类中,对异常的处理就非常巧妙。
经常会碰到这种情况,实现一个接口,接口签名是没有申明异常的。但在实现中却需要捕获异常。比如:guava包中的通用接口
public interface Supplier<T> {
/**
* Retrieves an instance of the appropriate type.
* The returned object may or
* may not be a new instance, depending on the implementation.
*
* @return an instance of the appropriate type
*/
T get();
}
我们实现这个接口,假设需要调用JDBC接口获取数据库的数据:
public class JdbcSupplier implements Supplier<Map> {
Map get() {
try {
//调用JDBC接口
//封装数据,return
} catch (SQLException e) {
throw new RuntimeException (e);
}
}
}
我们不得不捕获异常,并转换为RuntimeException,才能编译通过,但丢失了最初的异常面目。这类问题一般有两种做法。就像PlatformDependent类的throwException方法。
1.利用sun.misc.Unsafe的throwException方法;
2.利用泛型的擦拭,Raises an exception bypassing compiler checks for checked exceptions
public static void throwException(Throwable t) {
if (hasUnsafe()) {
PlatformDependent0.throwException(t);
} else {
//显式指定异常为RuntimeException,欺骗编译器通过编译;
//编译后会擦拭掉泛型信息,变成具体的受检查异常;
PlatformDependent.<RuntimeException>throwException0(t);
}
}
static void throwException(Throwable t) {
UNSAFE.throwException(t);
}
@SuppressWarnings("unchecked")
private static <E extends Throwable> void throwException0(Throwable t) throws E {
throw (E) t;
}
分享到:
相关推荐
5. **错误处理与日志**: Netty 提供了统一的异常处理机制,简化了错误的捕获和处理。同时,它集成了各种日志框架,如Log4j、SLF4J等,方便进行日志记录。 6. **稳定性与兼容性**: Netty 经过了多年的社区打磨和生产...
在Netty中,开发一个简单的服务器,如抛弃协议(Discard Protocol)服务器,通常只需要实现处理器中的messageReceived方法来处理接收到的消息,以及exceptionCaught方法来处理异常。抛弃协议是最简单的协议实现,它...
8. **错误处理**:Netty 提供了强大的异常处理机制,能够优雅地处理错误,防止系统崩溃。 9. **ChannelHandler**:这是Netty的核心组件,用于处理网络事件和业务逻辑。ChannelHandlerContext则用来引用当前处理链中...
在本文中,我们将探讨如何使用Netty 3版本来构建一个处理JT809协议的基础工程。 JT809是一种专门用于交通监控和管理的通信协议,主要在中国的智能交通系统中使用。它涵盖了车辆定位、轨迹回放、报警信息传输等功能...
在本文中,我们将深入探讨 Netty 4.1 的中文API帮助文档和用户指南,以及如何利用这些资源来提升你的网络编程技能。 首先,Netty 4.1 中文API帮助文档是理解 Netty 内部机制的关键工具。它包含了详细的类、接口、...
Netty的ChannelHandlerContext提供了一种方便的方式来处理这些消息的生命周期,包括读取、写入和异常处理。 4. 流媒体处理: - H264与H265:这两种是常见的视频编码格式,属于高效编码标准,用于压缩视频数据。在...
- **Pipeline(处理链)**:Netty的数据传输管道,允许自定义处理器链来处理进来的请求和发送的响应。 - **Handler(处理器)**:Pipeline中的节点,实现特定功能,如编解码、业务逻辑处理等。 - **Future和...
- **异常处理**:在Netty中,可以通过重写`exceptionCaught`方法来捕获并处理异常事件。这对于确保应用程序的健壮性和可靠性至关重要。 #### 四、环境配置 - **软件要求**:为了运行Netty示例程序,需要安装最新...
通过阅读这个“Netty_3.1中文用户手册.pdf”,你可以了解到Netty的基本原理、设计模式以及如何在实际项目中应用这些知识。尽管Netty不断更新,但基础概念和设计思想在新版本中仍然适用。因此,无论你是初学者还是...
8. **异常处理**:Netty提供了一套完整的异常处理机制,使得在发生错误时能够优雅地恢复或关闭连接。 9. **丰富的API**:Netty的API设计简洁且强大,易于理解和使用,降低了开发网络应用的门槛。 10. **社区活跃**...
在 Netty 中,多线程的应用是其处理高并发、高性能的关键因素之一。下面我们将深入探讨 Netty 中的多线程并发应用。 1. **线程模型** Netty 采用了 Boss-Worker 线程模型,它由两部分组成:Boss 线程和 Worker ...
8. **Error Handling**:Netty提供了一套完整的错误处理机制,可以优雅地处理异常情况,避免程序崩溃。 9. **ByteToMessageDecoder**和**MessageToByteEncoder**:这两个类用于解码和编码网络数据,可以根据需求...
ByteBuf是Netty中的核心组件,用于高效地处理网络I/O。因此,当涉及到字符串和字节之间的转换时,我们需要正确地处理编码。 1. **字符编码与字节流**:在计算机系统中,字符和字节的对应关系是由字符编码(如ASCII...
Netty提供了全面的异常处理机制,通过ExceptionHandler可以捕获和处理在处理I/O事件过程中发生的异常。 总的来说,通过研究Netty 5.0的官方示例,开发者可以深入了解Netty的工作原理,学习如何构建高性能的网络...
对于异常处理,可以在Netty的处理器中捕获并处理异常;对于性能优化,可以调整Netty的线程模型、缓冲区大小、心跳机制等参数。 总的来说,SpringBoot整合Netty的实践涉及到SpringBoot的应用构建、Netty的服务器和...
8. **Codec组件**:Netty提供了一系列编解码器,如LineBasedFrameDecoder用于按行处理数据,LengthFieldBasedFrameDecoder用于处理带有长度字段的协议。 9. **ChannelOption和Bootstrap**:ChannelOption用于配置...
9. **异常处理**:Netty提供了一套完整的异常处理机制,通过exceptionCaught方法捕获并处理运行时异常。 10. **实战应用**:手册中可能包含示例代码,展示如何使用Netty搭建服务器和客户端,处理网络请求和响应。 ...
管道则是一系列处理器的链,每个处理器(ChannelHandler)可以处理特定类型的事件,如读取数据、写入数据或者处理异常。 在Netty中,通道(Channel)是连接的抽象,它代表了与远程实体的一个连接,可以进行读写操作...