标签: bytebuffer

Java ByteBuffer 类

我正在从设备读取 byte[] 并尝试在 ByteBuffer 类的帮助下将其解释为 Java 中的整数数组,但出现索引越界错误。看这里:

byteBuffer.put(bytes); // put the array of bytes into the byteBuffer        

System.out.println("the value I want is " + byteBuffer.getInt(16*4)); // gives me the number I want, but I'd rather deal with an integer array like this:

System.out.println("the value I want is " + byteBuffer.asIntBuffer().get(16)); // index out of bounds? Why??
Run Code Online (Sandbox Code Playgroud)

java bytebuffer

3
推荐指数
1
解决办法
1016
查看次数

ByteBuffer 到字节数组

我有一个 ByteBuffer,我需要将其内容添加到 POST 请求中,以便远程显示代表的图像;但我不知道该怎么做。

这样做是行不通的:

byteBuffer.array()
Run Code Online (Sandbox Code Playgroud)

我尝试将其转换为字节数组,但它不起作用,因为图像无法正确显示:

byte[] byteArray = new byte[byteBuffer.remaining()];
frame.duplicate().get(byteArray);
HttpResponse response = null;
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(URL);
post.setEntity(new ByteArrayEntity(byteArray));
Run Code Online (Sandbox Code Playgroud)

我也考虑过将其转换为图像并获取其字节数组,但我不知道如何做到这一点以及它是否有效......

任何帮助将不胜感激。

java arrays bytebuffer

3
推荐指数
1
解决办法
7572
查看次数

从 ByteBuffer 读取以 NUL 结尾的字符串

如何从 JavaByteBuffer中读取以 NUL 结尾的 UTF-8 字符串ByteBuffer#position()

\n
ByteBuffer b = /* 61 62 63 64 00 31 32 34 00 (hex) */;\nString s0 = /* read first string */;\nString s1 = /* read second string */;\n\n// `s0` will now contain \xe2\x80\x9cABCD\xe2\x80\x9d and `s1` will contain \xe2\x80\x9c124\xe2\x80\x9d.\n
Run Code Online (Sandbox Code Playgroud)\n

我已经尝试过使用Charsets.UTF_8.decode(b),但似乎这个函数忽略当前ByteBuffer位置并读取直到缓冲区末尾。

\n

有没有更惯用的方法从字节缓冲区读取此类字符串,而不是寻找包含 0 的字节并将缓冲区限制为它(或将带有字符串的部分复制到单独的缓冲区中)?

\n

java nio bytebuffer text-decoding

3
推荐指数
1
解决办法
890
查看次数

Java NIO中ByteBuffer和CharBuffer有什么区别?

在java.nio包中,ByteBuffer和CharBuffer有什么区别.它与byte和char有相同的区别吗?

java nio bytebuffer char

2
推荐指数
1
解决办法
1604
查看次数

如何使用ReadableByteChannel获取文件内容并将其存储在byteBuffer中?

下面是我写的代码.我想做一件简单的事情,将二进制文件数据存储到byteBuffer中.

File file = new File(fileName);
try {
    ReadableByteChannel channel = new FileInputStream(fileName).getChannel();
    ByteBuffer buf = ByteBuffer.allocateDirect(file.length());

    // How can use buf.read to get all the contents?

} catch (Exception e){

}
Run Code Online (Sandbox Code Playgroud)

我在想

  1. 我如何使用read从通道获取所有数据并将其存储在ByteBuffer中
  2. 如果有更优雅的方式来分配ByteBuffer,除了使用Fileobject来获取文件的长度

java bytebuffer

2
推荐指数
2
解决办法
7396
查看次数

JNI ByteBuffer放了字节

JNIEXPORT jboolean JNICALL Java_directshowcamera_dsInterface_grab_1frame_1stream(JNIEnv *env, jobject obj, jint streamid, jobject barray)
{
    jclass bbclass = env->FindClass( "java/nio/ByteBuffer" );
    jmethodID putMethod = env->GetMethodID(bbclass, "put", "(I, B)Ljava/nio/ByteBuffer");
    unsigned char *buffer = stream_buffer( streamid );

    if( !stream_image_ready( streamid ) ) return (jboolean)0;

    for(int i=0; i < stream_device_size( streamid ); i++ ) {
        env->CallByteMethod( barray, putMethod, i, (jbyte)buffer[i] );
    }

    return (jboolean)1;
}
Run Code Online (Sandbox Code Playgroud)

所以,我有一个字节缓冲区,并且在Java中我已经分配了适当的大小,并注意到可以使用ByteBuffer.put(索引,字节),所以我试图获得该方法,但是当我在Java中时,我获得以下运行时异常:

java.lang.NoSuchMethodError:put

我做错了什么想法?我不太了解JNI,并且大部分时间都是我在网上找到的重复工作示例.

c++ java java-native-interface bytebuffer nosuchmethoderror

2
推荐指数
1
解决办法
2001
查看次数

int to cast,奇怪的行为

我目前从ByteBuffer读取一个短值并将其应用于int.

byte[] data = new byte{0x90, 0xAF};
ByteBuffer b = ByteBuffer.wrap(data);
int value = b.getShort();
Run Code Online (Sandbox Code Playgroud)

但是value包含现在0xFFFF90AF而不是0x90AF.我的解决方案是通过0xFFFF以下方式将值掩盖:int value = b.getShort() & 0xFFFF;

我认为一个上流总是可能的,因为short小于int.有人能解释为什么它会像这样吗?

java casting bytebuffer

2
推荐指数
1
解决办法
6206
查看次数

如何重新使用ByteBuffer将多个512字节块写入套接字?

这就是我的意思:

put 512 bytes
SocketChannel#write(this data)
start at the beginning and put 512 bytes again
rinse & repeat
Run Code Online (Sandbox Code Playgroud)

我仍然试图掌握ByteBuffers并尝试使用ByteBuffer#reset()但我总是得到一个InvalidMarkException,即使这似乎是正确的解决方案(除非我错了,我不会感到惊讶!)

谢谢!

编辑:具体来说,我正在尝试实现同样的效果,除了我想以512字节块而不是批量发送它. http://privatepaste.com/1fb0e6df07

java nio bytebuffer

2
推荐指数
1
解决办法
2944
查看次数

buff.getInt()和0xffffffffL是一个身份?

这是我一直在关注的一些代码:

public static long getUnsignedInt(ByteBuffer buff) {
    return (long) (buff.getInt() & 0xffffffffL);
}
Run Code Online (Sandbox Code Playgroud)

有没有理由这样做buff.getInt() & 0xffffffffL(0xffffffffL在32个最低有效位中有32位1)?在我看来,结果将永远是buff.getInt().

java bytebuffer bit-manipulation

2
推荐指数
1
解决办法
2951
查看次数

如何使用JNI将Java ByteBuffer发送到C?

首先,我想说旧的答案不起作用(例如,下面的答案中的GetDirectBufferAddress函数现在想要一个参数),如下所示:

JNI - 带有ByteBuffer参数的本机方法

和这里,

如何写入和读取从java传递到jni的bytebuffer

如果有人帮忙会更好..

因此,我无法使用JNI正确地将我的ByteBuffer(其中一些元素已填充)从Java发送到C,并且我无法将该ByteBuffer的元素再次返回到C

我的本地功能解除:

public native int myfunc(ByteBuffer pkt);
Run Code Online (Sandbox Code Playgroud)

分配给它

private ByteBuffer pkt = ByteBuffer.allocate(1000);
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

System.out.println(myfunc(pkt));  // Doesn't works, throws exception
pkt.position(0);
System.out.println(pkt.get()); // works, when I do comment line above .println
Run Code Online (Sandbox Code Playgroud)

我的C代码如下:

JNIEXPORT jint JNICALL Java_xxx_myfunc(JNIEnv *, jobject, jobject); // header


JNIEXPORT jint JNICALL Java_xxx_myfunc(JNIEnv *env, jobject obj, jobject pkt) // function
{
  jbyte *buff = (jbyte *) env->GetDirectBufferAddress(pkt);
  // buff[0] = 0; I've also tried in this way
  return buff[0];
  //return 1; …
Run Code Online (Sandbox Code Playgroud)

c java java-native-interface bytebuffer native

2
推荐指数
1
解决办法
1571
查看次数