ByteBuf 转为byte[] 不要用array()不对的。 JAVA 用内部类解决接口 交叉调用问题 2个串口实现透传,会相互在对方的接收接口实现里调用发送。

在Netty中,ByteBuf 是一个专门用于处理字节数据的缓冲区类,它提供了丰富的方法来操作和管理字节数据。要将 ByteBuf 转换为 byte[] 数组,可以使用以下方法:

使用 ByteBufreadBytes 方法

Netty的 ByteBuf 类提供了 readBytes 方法,可以将 ByteBuf 中的数据读取到一个指定大小的 byte[] 数组中。这是最常用的方法之一。

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

public class ByteBufToByteArray {
    public static void main(String[] args) {
        // 创建一个ByteBuf,并写入数据
        ByteBuf byteBuf = Unpooled.buffer();
        byteBuf.writeBytes("Hello, ByteBuf!".getBytes());

        // 将ByteBuf转换为byte[]
        byte[] byteArray = new byte[byteBuf.readableBytes()];
        byteBuf.readBytes(byteArray);

        // 打印转换后的byte[]
        System.out.println(new String(byteArray));

        // 注意:使用完ByteBuf后应该释放资源
        byteBuf.release();
    }
}

解释和注意事项:

  1. 创建 ByteBuf:在示例中,使用 Unpooled.buffer() 创建了一个默认的 ByteBuf 实例,并写入了字符串数据 "Hello, ByteBuf!"

  2. 读取到 byte[]:使用 readableBytes() 方法获取 ByteBuf 中可读取的字节数,然后创建一个相同大小的 byte[] 数组,并调用 readBytes(byteArray) 方法将 ByteBuf 中的数据读取到 byteArray 中。

  3. 释放资源:使用完 ByteBuf 后应该调用 release() 方法释放资源,防止内存泄漏。

  4. 异常处理:在实际应用中,应该考虑异常处理和错误检查,例如 readBytes 可能会抛出 IndexOutOfBoundsException 如果 ByteBuf 中的数据超过了 byteArray 的大小。

这种方法简单直接,并且是标准的Netty做法,适用于大多数情况下将 ByteBuf 转换为 byte[] 的需求。

JAVA 用内部类解决接口 交叉调用问题。

2个串口实现透传,会相互在对方的接收接口实现里调用发送。
在这里插入图片描述

在Java中,内部类是定义在其他类内部的类。内部类具有访问外部类的成员变量和方法的能力,并且可以有效地实现封装和组织代码。Java中的内部类主要分为四种类型:普通内部类、静态内部类、局部内部类和匿名内部类。下面详细介绍每种类型的内部类及其用法。

1. 普通内部类

普通内部类是定义在另一个类内部的普通类。它可以访问外部类的所有成员,包括私有成员,并且可以直接调用外部类的方法和变量。

示例代码:
public class OuterClass {
    private int outerVar = 10;

    // 普通内部类
    public class InnerClass {
        public void innerMethod() {
            System.out.println("Inner method called");
            System.out.println("Outer variable: " + outerVar); // 访问外部类变量
        }
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.new InnerClass(); // 创建内部类实例
        inner.innerMethod(); // 调用内部类方法
    }
}

2. 静态内部类

静态内部类是声明为静态的内部类。与普通内部类不同,静态内部类可以直接通过外部类名访问,而不需要先创建外部类的实例。

示例代码:
public class OuterClass {
    private static int outerVar = 10;

    // 静态内部类
    public static class StaticInnerClass {
        public void staticInnerMethod() {
            System.out.println("Static inner method called");
            System.out.println("Outer variable: " + outerVar); // 访问外部类的静态变量
        }
    }

    public static void main(String[] args) {
        OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass(); // 创建静态内部类实例
        inner.staticInnerMethod(); // 调用静态内部类方法
    }
}

3. 局部内部类

局部内部类是定义在方法或作用域内部的类。它的作用域被限制在方法内部,只能在方法内部访问它,且不能使用访问控制修饰符 privatepublicprotectedstatic

示例代码:
public class OuterClass {
    private int outerVar = 10;

    public void outerMethod() {
        // 局部内部类
        class LocalInnerClass {
            public void localInnerMethod() {
                System.out.println("Local inner method called");
                System.out.println("Outer variable: " + outerVar); // 访问外部类变量
            }
        }

        LocalInnerClass inner = new LocalInnerClass(); // 创建局部内部类实例
        inner.localInnerMethod(); // 调用局部内部类方法
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.outerMethod(); // 调用外部类方法,间接调用局部内部类方法
    }
}

4. 匿名内部类

匿名内部类是没有名字的内部类,它通常用于创建只需一次使用的类。匿名内部类通常是在方法参数中实现接口或继承类。

示例代码:
interface Greeting {
    void greet();
}

public class OuterClass {
    public void callGreeting() {
        // 匿名内部类实现接口
        Greeting greeting = new Greeting() {
            @Override
            public void greet() {
                System.out.println("Hello from anonymous class");
            }
        };

        greeting.greet(); // 调用匿名内部类方法
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.callGreeting(); // 调用外部类方法,间接调用匿名内部类方法
    }
}

总结

内部类在Java中提供了一种有效的方式来组织和封装代码,允许类之间实现更紧密的关系。不同类型的内部类适用于不同的场景,可以根据具体需求选择适合的内部类类型。

  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值