【问题标题】:How to pass a byte[] to this function如何将字节 [] 传递给此函数
【发布时间】:2013-02-17 17:30:16
【问题描述】:

我有一个带有这个签名的函数:

void insert(T[] thearray);

我有一个像这样的字节数组:

byte[] value = new byte[4096];

但是如果我这样调用函数:

cb.insert(值);

我收到一个错误:

The method insert(Byte) in the type CircularBuffer<Byte> is not applicable for the arguments (byte[])

CircularBuffer 是具有插入方法的类。

我像这样实例化 CircularBuffer:

CircularBuffer<Byte> cb = new CircularBuffer<Byte>(4096);

如何将值传递给这个插入函数?

为了清楚起见,CircularBuffer 类是这样声明的:

public class CircularBuffer<T>

public CircularBuffer(int size) //ctor

如果您需要更多详细信息:

https://codereview.stackexchange.com/questions/22826/circular-buffer-implementation-for-buffering-tcp-socket-messages

编辑最后,出于效率原因,我决定创建一个专门的 ByteCircularBuffer。 - 使用字节。这个原始类型到对象类型的区域,例如 byte -> Byte 是令人困惑的。

【问题讨论】:

    标签: java


    【解决方案1】:

    byte[] 不是Byte[]。您需要先将一个显式转换为另一个。

    参见例如Cast ArrayList of wrappers to corresponding array of primitives 了解可能的方法。

    【讨论】:

    • 我不想复制一个可能很大的数组。我认为链接副本。我也不想使用第三方类。
    • @user619818:除了修改 CircularBuffer 类之外,您别无选择。
    • 如何修改 CircularBuffer?
    • @user619818:不知道,没看过!
    【解决方案2】:

    Bytebyte 完全不同。要么将字节数组转换为字节数组(这需要大量时间和内存),要么编写新类ByteCircularBuffer(取CircularBuffer&lt;T&gt; 并将T 替换为byte)。

    【讨论】:

    • 我试过这个:class ByteCircularBuffer extends CircularBuffer { } 但随后出现错误:此行有多个标记。 - 标记“字节”的语法错误,此标记后应有尺寸。 - 标记的语法错误,错误的构造
    • 是的。你不能让ByteCircularBuffer 扩展CircularBuffer。你必须创建一个完全独立的类。
    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 2018-12-26
    相关资源
    最近更新 更多