标签: bytebuffer

为什么.array()在从映射的FileChannels返回的ByteBuffer上不起作用?

我正在用Java做内存映射的IO。FileChannel类允许您将ByteBuffer映射到文件的特定部分。我这样做是用只读方式打开的文件。

我遇到的问题是,当我尝试对生成的ByteBuffer调用.array()方法时遇到异常。也许是因为.array()返回byte []数组,而我真的想要一个最终的字节数组吗?

有没有办法解决?

java bytebuffer memory-mapping

6
推荐指数
1
解决办法
5686
查看次数

如何确定UsbRequest.queue(..)方法的接收字节长度?

我在Android 3.1中遇到UsbRequest类问题.

这是我的代码:

ByteBuffer buffer = ByteBuffer.allocate(4096);
buffer.order(ByteOrder.LITTLE_ENDIAN);
UsbRequest request = new UsbRequest();
request.initialize(mConnection, mEndpointIn);
request.queue(buffer, 4096);

if (mConnection.requestWait() == request) {
   byte[] data = buffer.array();
}
Run Code Online (Sandbox Code Playgroud)

数组的大小data为4096,但实际接收的字节长度要小得多.

如何确定实际接收字节的大小?

谢谢.

usb android bytebuffer communication

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

为什么ByteBuffers hashCodes一样?

我有一个像这样的类构造函数:

public JavoImageCorrectedDataHeader()
    {
        ByteBuffer buffer = ByteBuffer.allocate(this.size());
        buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN);
        setByteBuffer(buffer, 0);
        System.out.println("buffer.hasCode=" + buffer.hashCode());
    }
Run Code Online (Sandbox Code Playgroud)

在我的其他课程中,我通过使用在不同的位置和时间创建了上述类的许多实例

new JavoImageCorrectedDataHeader()
Run Code Online (Sandbox Code Playgroud)

然后,我预计它将为它们打印出不同的hashCode.但我实际上看到打印出相同的hashCode:

buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
Run Code Online (Sandbox Code Playgroud)

我必须想念如何使用ByteBuffer.

java debugging buffer bytebuffer hashcode

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

Java MappedByteBuffer.isLoaded()

在我看来,MappedByteBuffer.isLoaded()始终false在Windows上返回.当我在BSD Unix上测试时,我得到true了相同的测试数据.

我应该担心吗?isLoaded()无论我使用什么尺寸的数据,我都无法在Windows上返回true.

这是我的测试代码供参考:

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MemMapTest {

    private static final String FILENAME = "mydata.dat";
    private static final int MB_1 = 1048576;  // one Mbyte
    private static final byte[] testData = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};  // len = 10 bytes

    public static void main(String[] args) throws FileNotFoundException, IOException {

        // Create a …
Run Code Online (Sandbox Code Playgroud)

java nio bytebuffer

6
推荐指数
1
解决办法
439
查看次数

如何在Java中使用ByteBuffer的Wrap方法

好吧,所以我正在查找从字节数组转换为java中的数值的最佳方法是什么,我遇到了这个链接.第二个答案提到了ByteBuffer类的使用.对于那些不希望点击链接的人,最初问题是否我有:

byte[] by = new byte[8];
Run Code Online (Sandbox Code Playgroud)

如何将其转换为int?答案是......

ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 0, 0, 0, 0, 4});
long l = bb.getLong();

System.out.println(l);
Run Code Online (Sandbox Code Playgroud)

结果

4
Run Code Online (Sandbox Code Playgroud)

这真是太棒了,但我只是想在走这条路之前确认一些事情.

假设我之前读取的字节数组长度为8个字节.

byte[] oldByte = new byte[8];
Run Code Online (Sandbox Code Playgroud)

那我呢......

ByteBuffer bb = ByteBuffer.wrap(new byte[] {oldByte[2], oldByte[3]});
int intValue = bb.getInt();
Run Code Online (Sandbox Code Playgroud)

是否会以与前一个示例相同的方式读取/读取?

java arrays byte bytebuffer type-conversion

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

Java的ByteBuffer最接近C#?

目前正在寻找Java和C#应用程序的接口.在Java中,我可以使用getShort(),getFloat()等等,从缓冲区中获得各种不同的数据类型.

在C#我使用的是a MemoryStream,但只有一个get()功能.有人知道数据类型甚至是模仿这个功能的类吗?

c# bytebuffer memorystream

6
推荐指数
1
解决办法
614
查看次数

Spring数据Cassandra 2.0 Select BLOB列返回不正确的ByteBuffer数据

上下文:Spring数据cassandra官方1.0.2.RELEASE来自Maven Central repo,CQL3,cassandra 2.0,datastax driver 2.0.4

背景:cassandra blob数据类型映射到Java ByteBuffer.

下面的示例代码演示了您不会使用等效插入旁边的select来检索正确的字节.实际检索的数据以许多垃圾字节为前缀,实际上看起来像是整行的序列化.这篇与Cassandra 1.2相关的老帖子提示我们可能必须从长度为ByteBuffer.remaining()的ByteBuffer.arrayOffset()开始,但是arrayOffset值实际上是0.

我发现了一个spring-data-cassandra 2.0.0.SNAPSHOT但CassandraOperations API有很大的不同,它的包名也是:org.springdata ...与org.springframework ...

帮助解决这个问题,但非常欢迎.

与此同时,我似乎必须将Base64的二进制数据编码/解码到文本数据类型列.

---这里是我使用的简单表CQL元数据-------------

CREATE TABLE person (
  id text,
  age int,
  name text,
  pict blob,
  PRIMARY KEY (id)
) ;
Run Code Online (Sandbox Code Playgroud)

---跟随映射到CQL表的简单数据对象---

package org.spring.cassandra.example; 

import java.nio.ByteBuffer;
import org.springframework.data.cassandra.mapping.PrimaryKey; 
import org.springframework.data.cassandra.mapping.Table; 

@Table 
public class Person { 

 @PrimaryKey 
 private String id; 

 private int age; 
 private String name; 
 private ByteBuffer pict; 

 public Person(String id, int age, String name, ByteBuffer pict) { 
  this.id = id; this.name = …
Run Code Online (Sandbox Code Playgroud)

bytebuffer blob cassandra spring-data-cassandra

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

将 BufferedImage 转换为 ByteBuffer

我正在尝试将缓冲图像转换为 ByteBuffer,但出现此异常

java.awt.image.DataBufferInt cannot be cast to java.awt.image.DataBufferByte
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我并建议一个好的转换方法。

来源:

public static ByteBuffer convertImageData(BufferedImage bi) 
{
    byte[] pixelData = ((DataBufferByte) bi.getRaster().getDataBuffer()).getData();
    //        return ByteBuffer.wrap(pixelData);
    ByteBuffer buf = ByteBuffer.allocateDirect(pixelData.length);
    buf.order(ByteOrder.nativeOrder());
    buf.put(pixelData);
    buf.flip();
    return buf;
}
Run Code Online (Sandbox Code Playgroud)

这是我的对象

 ByteBuffer buf = convertImageData(image);
Run Code Online (Sandbox Code Playgroud)

java bufferedimage bytebuffer image-processing

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

Android MediaExtractor / MediaCodec 本机崩溃

我在 Android 中开发了一个简单的音频播放器,可以播放 .mp3 文件。为了解码文件,我使用 Android MediaExtractor 和 Android MediaCodec。示例代码如下所示:

        int inIndex = mDecoder.dequeueInputBuffer(TIMEOUT_US);
        if (inIndex >= 0) {
            ByteBuffer buffer = inputBuffers[inIndex];
            int sampleSize = mExtractor.readSampleData(buffer, 0);
            if (sampleSize < 0) {
                // We shouldn't stop the playback at this point, just pass the EOS
                // flag to mDecoder, we will get it again from the
                // dequeueOutputBuffer
                Log.d(TAG, "InputBuffer BUFFER_FLAG_END_OF_STREAM");
                mDecoder.queueInputBuffer(inIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);

            }
            else {
                mDecoder.queueInputBuffer(inIndex, 0, sampleSize, mExtractor.getSampleTime(), 0);
                mExtractor.advance();
            }
Run Code Online (Sandbox Code Playgroud)

在我的所有测试设备上,代码运行没有任何问题。然而,在 Google Play …

memory android bytebuffer mediaextractor android-mediacodec

6
推荐指数
0
解决办法
695
查看次数

如何从 ByteBuffer 中提取使用过的字节数组?

java.nio.ByteBuffer类有一个ByteBuffer.array()方法,然而,这将返回一个数组,它是该缓冲区的容量的大小,而不是使用容量。因此,我遇到了一些问题。

我有一个 ByteBuffer,我将其分配为某个大小,然后我将数据插入其中。

ByteBuffer oldBuffer = ByteBuffer.allocate(SIZE);
addHeader(oldBuffer, pendingItems);
newBuffer.flip();
oldBuffer.put(newBuffer);
// as of now I am sending everything from oldBuffer
send(address, oldBuffer.array());
Run Code Online (Sandbox Code Playgroud)

我怎么能只发送oldBuffer. 有没有一种班轮可以做到这一点?

java arrays nio bytebuffer guava

6
推荐指数
1
解决办法
2754
查看次数