MappedByteBuffer (в Android Studio) конструктор не работает (супер конструктор не работает) - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть байтовый массив, и он должен быть преобразован в MappedByteBuffer.

Но когда я пытаюсь создать MappedByteBuffer, возникает ошибка.

error: cannot find symbol method MappedByteBuffer(int,int,int,int,byte[],int)

MappedByteBuffer . java

package java.nio;

import java.io.FileDescriptor;
import sun.misc.Unsafe;

public abstract class MappedByteBuffer
    extends ByteBuffer
{

   ...

// Android-added: Additional constructor for use by Android's DirectByteBuffer.
    MappedByteBuffer(int mark, int pos, int lim, int cap, byte[] buf, int offset) {
        super(mark, pos, lim, cap, buf, offset);  // <- when I hover mouse here, ByteBuffer() in ByteBuffer cannot be applied to message appears with a red underline.
        this.fd = null;
    }

   ...

}

ByteBuffer. java

package java.nio;
import libcore.io.Memory;
import dalvik.annotation.codegen.CovariantReturnType;

public abstract class ByteBuffer
    extends Buffer
    implements Comparable<ByteBuffer>
{

    // These fields are declared here rather than in Heap-X-Buffer in order to
    // reduce the number of virtual method invocations needed to access these
    // values, which is especially costly when coding small buffers.
    //
    final byte[] hb;                  // Non-null only for heap buffers
    final int offset;
    boolean isReadOnly;                 // Valid only for heap buffers

    // Creates a new buffer with the given mark, position, limit, capacity,
    // backing array, and array offset
    //
    ByteBuffer(int mark, int pos, int lim, int cap,   // package-private
                 byte[] hb, int offset)
    {
        // Android-added: elementSizeShift parameter (log2 of element size).
        super(mark, pos, lim, cap, 0 /* elementSizeShift */);
        this.hb = hb;
        this.offset = offset;
    }

    ...

}

Что мне кажется странным, когда переход к определению extends ByteBuffer в MappedByteBuffer. java, он показывает ByteBuffer.annotated. java, а не ByteBuffer. java

ByteBuffer.annotated. java


// -- This file was mechanically generated: Do not edit! -- //


package java.nio;


@SuppressWarnings({"unchecked", "deprecation", "all"})
public abstract class ByteBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.ByteBuffer> {

ByteBuffer(int mark, int pos, int lim, int cap) { super(0, 0, 0, 0, 0); throw new RuntimeException("Stub!"); }

Я не знаю, что {classname}. аннотированный. java делает, так что это не может быть ошибкой, но я вставил, потому что я думаю, что это странно.

Так как я могу создать MappedByteBuffer из байтового массива? Есть только 1 конструктор, но он сломан.

1 Ответ

1 голос
/ 26 февраля 2020

Существует только 1 конструктор, но он не работает

Этот конструктор не опубликован c (это пакетный приват), поэтому вы не можете вызвать его.

Итак, как я могу создать MappedByteBuffer из байтового массива?

Вы не можете, не записав его сначала в файл. Из документов :

Прямой байтовый буфер, содержимое которого представляет собой область файла, отображенную в памяти.

Если вам нужно создать MappedByteBuffer конкретно, а не просто ByteBuffer из байтового массива, вам нужно записать его в файл и использовать FileChannel.map. Если вам просто нужно ByteBuffer, вы можете использовать ByteBuffer.wrap

...