标签: bytebuffer

是否可以将Process stdout InputStream读入NIO ByteBuffer?

是否可以使用NIO处理进程中的stdout?我有它使用java.io,但这是一个练习,以了解更多关于NIO和探索性能改进的可能性.

基本上我想尽可能快地将大量文本从stdout流式传输到缓冲区而不会阻塞,然后再处理该缓冲区的内容.麻烦的是,我似乎无法弄清楚正确的伏都教使其与NIO合作.这就是我现在所处的位置:

ProcessBuilder pb = new ProcessBuilder( ... );
Process p = pb.start();
stdout = new StreamConsumer(p.getInputStream());
new Thread(stdout).start();
// other stuff omitted for brevity
Run Code Online (Sandbox Code Playgroud)

StreamConsumer类看起来像这样:

class StreamConsumer implements Runnable
{
  private InputStream is;

  public StreamConsumer(InputStream is)
  {
    this.is = is;
  }

  public void run()
  {
    try
    {
      ReadableByteChannel source = Channels.newChannel(is);

      // Is it possible get a channel to a ByteBuffer 
      // or MappedByteBuffer here?
      WritableByteChannel destination = ??;
      ByteBuffer buffer = ByteBuffer.allocateDirect(128 * 1024);

      while (source.read(buffer) != -1) …
Run Code Online (Sandbox Code Playgroud)

java nio bytebuffer inputstream

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

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

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

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

有没有办法解决?

java bytebuffer memory-mapping

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

如何序列化ByteBuffer

我希望使用RMI在网络上发送java.nio.ByteBuffer,但是ByteBuffer不可序列化.我尝试过以下自定义类无济于事:

public class NetByteBuffer implements java.io.Serializable {

ByteBuffer buffer;

public NetByteBuffer(ByteBuffer buffer) {
    this.buffer = buffer;
}

public ByteBuffer getByteBuffer() {
    return this.buffer;
}
Run Code Online (Sandbox Code Playgroud)

}

客户端仍然获得不可序列的异常.有任何想法吗?

谢谢

java bytebuffer rmi

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

如何在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万
查看次数

Delphi XE字节数组索引

我像这样使用简单的循环缓冲区

var
  Values: array [byte] of single;
  ptr: byte;
Run Code Online (Sandbox Code Playgroud)

在这个测试例子中

for ptr:=0 to 10 do Values[Byte(ptr-5)]:=1;
Run Code Online (Sandbox Code Playgroud)

我希望设置为1前5个值和最后5个值,但XE4 compiller产生不正确的代码,它使用32位指针数学来计算数组索引:

for ptr:=0 to 10 do Values[Byte(ptr-5)]:=1;
005B94BB C645FB00         mov byte ptr [ebp-$05],$00
005B94BF 33C0             xor eax,eax
005B94C1 8A45FB           mov al,[ebp-$05]
005B94C4 C78485E0FBFFFF0000803F mov [ebp+eax*4-$0420],$3f800000
005B94CF FE45FB           inc byte ptr [ebp-$05]
005B94D2 807DFB0B         cmp byte ptr [ebp-$05],$0b
005B94D6 75E7             jnz $005b94bf
Run Code Online (Sandbox Code Playgroud)

这是我的错误代码和操作字节索引的正确方法吗?

arrays delphi indexing bytebuffer compiler-bug

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

java unsafe中getXXXVolatile与getXXX有什么区别?

我试图理解java unsafe中的两个方法:

   public native short getShortVolatile(Object var1, long var2);
Run Code Online (Sandbox Code Playgroud)

VS

   public native short getShort(Object var1, long var2);
Run Code Online (Sandbox Code Playgroud)

这有什么真正的区别?这里的挥发性真正起作用了什么?我在这里找到了API doc:http://www.docjar.com/docs/api/sun/misc/Unsafe.html#getShortVolatile( Object,%20long)

但它并没有真正解释两种功能之间的区别.

我的理解是,对于不稳定的,它只对我们写作时很重要.对我来说,我们调用putShortVolatile然后进行读取应该是有意义的,我们可以简单地调用,getShort()因为volatile写入已经保证新值已经刷新到主存储器中.

如果有任何问题,请帮我纠正.谢谢!

java bytebuffer unsafe volatile java-memory-model

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

为什么 copyPixelsFromBuffer 给出的颜色不正确?setPixels 正确但速度慢

对于我的 Android 应用程序,我ByteBuffer从本机代码中获取了一个。它包含创建位图的像素颜色值。

原始图像 -

在此输入图像描述

我在位copyPixelsFromBuffer图上使用,但在显示位图时得到的颜色不正确。

这是这种方法的代码 -

方法一

ByteBuffer buffer = ...

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
buffer.rewind();
bitmap.copyPixelsFromBuffer(buffer);
Run Code Online (Sandbox Code Playgroud)

大约。时间- ~0.4 ms
结果- 颜色错误 -
在此输入图像描述

方法2

接下来我尝试了setPixels。它仍然给出错误的颜色,速度慢 10 倍以上,并且需要额外的内存int[]。请注意,这buffer.hasArray()false,所以我无法从缓冲区获取数组。

ByteBuffer buffer = ...

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
buffer.rewind();

int[] pixels = new int[width * height];

for (int i = 0; i < width * height; i++) {
    int a = buffer.get();
    int …
Run Code Online (Sandbox Code Playgroud)

performance android bytebuffer colors bitmap

5
推荐指数
1
解决办法
2359
查看次数

java.lang.UnsupportedOperationException at java.nio.ByteBuffer.array(ByteBuffer.java:959)

以下 Java 代码可以编译,但在运行时出现错误:

\n\n
# javac ByteBufTest.java\n# java ByteBufTest\nException in thread "main" java.lang.UnsupportedOperationException\n    at java.nio.ByteBuffer.array(ByteBuffer.java:959)\n    at ByteBufTest.<init>(ByteBufTest.java:12)\n    at ByteBufTest.main(ByteBufTest.java:33)\n# \n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么会出现这种情况?

\n\n

注意\xef\xbc\x9a接下来,我需要在JNI中使用mDirectBuffer,所以我必须使用ByteBuffer.allocateDirect(TEST_BUFFER_SIZE)函数\xe3\x80\x82

\n\n

ByteBufTest.java:

\n\n
import java.nio.ByteBuffer;\n\npublic class ByteBufTest {\n\n    public static final int TEST_BUFFER_SIZE = 128;\n\n    private ByteBuffer mDirectBuffer;\n\n    public ByteBufTest() {\n        mDirectBuffer = ByteBuffer.allocateDirect(TEST_BUFFER_SIZE);\n        byte[] buf = mDirectBuffer.array();\n        buf[1]=100;\n    }\n\n    public void test() {\n\n        printBuffer("nativeInitDirectBuffer",mDirectBuffer.array());\n\n    }\n\n    private void printBuffer( String tag, byte[] buffer ) {\n        StringBuffer sBuffer = new StringBuffer();\n        for( int i=0; i<buffer.length; i++ …
Run Code Online (Sandbox Code Playgroud)

java bytebuffer

5
推荐指数
1
解决办法
8166
查看次数

如何在 Kotlin 中将数据类转换为 ByteBuffer?

我正在尝试使用 Kinesis,它需要字节缓冲区格式的数据。到目前为止,我看到的所有示例都是用 Java 编写的,并传递简单的字符串。任何人都可以知道如何将 kotlin 数据类转换为 bytebuffer 吗?

例如数据类 abc ( var a: Long, var b: String, var c: Double )

bytebuffer kotlin aws-sdk amazon-kinesis-kpl

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

从 InputStream 获取 Publisher&lt;ByteBuffer&gt;

我刚刚升级了 mongo-db-java-driver,现在方便的功能GridFSBucket.uploadFromStream已经消失了。因此我们现在得到了一个

GridFSUploadPublisher<ObjectId> uploadFromPublisher(String filename, Publisher<ByteBuffer> source);
Run Code Online (Sandbox Code Playgroud)

有什么想法如何将我的 InputStream 转换为 吗Publisher<ByteBuffer>?java驱动程序或Reactor中有任何实用函数吗?

java bytebuffer publisher reactor mongodb-java

5
推荐指数
1
解决办法
1710
查看次数