`
jnullpointer
  • 浏览: 15889 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Netty中PlatformDependent绕开受检查异常处理

阅读更多
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;
    }
分享到:
评论

相关推荐

    最新netty中文文档chm版

    5. **错误处理与日志**: Netty 提供了统一的异常处理机制,简化了错误的捕获和处理。同时,它集成了各种日志框架,如Log4j、SLF4J等,方便进行日志记录。 6. **稳定性与兼容性**: Netty 经过了多年的社区打磨和生产...

    Netty_中文技术文档

    此外,`exceptionCaught`方法用于处理异常情况,保证了程序的健壮性。 #### 四、环境准备与资源获取 为了顺利运行Netty程序,开发者需确保本地环境已安装最新版本的Netty框架及Java Development Kit (JDK) 1.5或...

    Netty中文指南教程

    // 处理异常情况 e.getCause().printStackTrace(); Channel ch = e.getChannel(); ch.close(); } } ``` 此示例中,`DiscardServerHandler` 类继承自 `SimpleChannelHandler`,重写了 `messageReceived` 和 `...

    Netty3.1 中文用户手册

    在Netty中,开发一个简单的服务器,如抛弃协议(Discard Protocol)服务器,通常只需要实现处理器中的messageReceived方法来处理接收到的消息,以及exceptionCaught方法来处理异常。抛弃协议是最简单的协议实现,它...

    Netty-API-文档中文版

    8. **错误处理**:Netty 提供了强大的异常处理机制,能够优雅地处理错误,防止系统崩溃。 9. **ChannelHandler**:这是Netty的核心组件,用于处理网络事件和业务逻辑。ChannelHandlerContext则用来引用当前处理链中...

    netty 4.1 中文api 帮助文档 + 用户指南

    在本文中,我们将深入探讨 Netty 4.1 的中文API帮助文档和用户指南,以及如何利用这些资源来提升你的网络编程技能。 首先,Netty 4.1 中文API帮助文档是理解 Netty 内部机制的关键工具。它包含了详细的类、接口、...

    使用netty3建立的JT809处理基本工程

    在本文中,我们将探讨如何使用Netty 3版本来构建一个处理JT809协议的基础工程。 JT809是一种专门用于交通监控和管理的通信协议,主要在中国的智能交通系统中使用。它涵盖了车辆定位、轨迹回放、报警信息传输等功能...

    Netty 中文教程

    - **Pipeline(处理链)**:Netty的数据传输管道,允许自定义处理器链来处理进来的请求和发送的响应。 - **Handler(处理器)**:Pipeline中的节点,实现特定功能,如编解码、业务逻辑处理等。 - **Future和...

    netty中文开发指南

    - **异常处理**:在Netty中,可以通过重写`exceptionCaught`方法来捕获并处理异常事件。这对于确保应用程序的健壮性和可靠性至关重要。 #### 四、环境配置 - **软件要求**:为了运行Netty示例程序,需要安装最新...

    netty官网学习手册中文版

    通过阅读这个“Netty_3.1中文用户手册.pdf”,你可以了解到Netty的基本原理、设计模式以及如何在实际项目中应用这些知识。尽管Netty不断更新,但基础概念和设计思想在新版本中仍然适用。因此,无论你是初学者还是...

    Netty实战 电子版.pdf_java_netty_服务器_

    8. **异常处理**:Netty提供了一套完整的异常处理机制,使得在发生错误时能够优雅地恢复或关闭连接。 9. **丰富的API**:Netty的API设计简洁且强大,易于理解和使用,降低了开发网络应用的门槛。 10. **社区活跃**...

    netty中的多线程应用

    在 Netty 中,多线程的应用是其处理高并发、高性能的关键因素之一。下面我们将深入探讨 Netty 中的多线程并发应用。 1. **线程模型** Netty 采用了 Boss-Worker 线程模型,它由两部分组成:Boss 线程和 Worker ...

    netty 4.1中文.CHM

    8. **Error Handling**:Netty提供了一套完整的错误处理机制,可以优雅地处理异常情况,避免程序崩溃。 9. **ByteToMessageDecoder**和**MessageToByteEncoder**:这两个类用于解码和编码网络数据,可以根据需求...

    使用netty进行rtsp服务端开发.zip

    Netty的ChannelHandlerContext提供了一种方便的方式来处理这些消息的生命周期,包括读取、写入和异常处理。 4. 流媒体处理: - H264与H265:这两种是常见的视频编码格式,属于高效编码标准,用于压缩视频数据。在...

    netty5.0官方自带的demo

    Netty提供了全面的异常处理机制,通过ExceptionHandler可以捕获和处理在处理I/O事件过程中发生的异常。 总的来说,通过研究Netty 5.0的官方示例,开发者可以深入了解Netty的工作原理,学习如何构建高性能的网络...

    springboot整合netty的demo

    对于异常处理,可以在Netty的处理器中捕获并处理异常;对于性能优化,可以调整Netty的线程模型、缓冲区大小、心跳机制等参数。 总的来说,SpringBoot整合Netty的实践涉及到SpringBoot的应用构建、Netty的服务器和...

    netty4 api 中文

    8. **Codec组件**:Netty提供了一系列编解码器,如LineBasedFrameDecoder用于按行处理数据,LengthFieldBasedFrameDecoder用于处理带有长度字段的协议。 9. **ChannelOption和Bootstrap**:ChannelOption用于配置...

    netty 中文文档

    9. **异常处理**:Netty提供了一套完整的异常处理机制,通过exceptionCaught方法捕获并处理运行时异常。 10. **实战应用**:手册中可能包含示例代码,展示如何使用Netty搭建服务器和客户端,处理网络请求和响应。 ...

    netty框架 jar包

    管道则是一系列处理器的链,每个处理器(ChannelHandler)可以处理特定类型的事件,如读取数据、写入数据或者处理异常。 在Netty中,通道(Channel)是连接的抽象,它代表了与远程实体的一个连接,可以进行读写操作...

Global site tag (gtag.js) - Google Analytics