标签: bytebuffer

在C#中相当于Java的"ByteBuffer.putType()"

我试图通过从Java移植代码来格式化C#中的字节数组.在Java中,使用方法"buf.putInt(value);",buf.putShort,buf.putDouble,(等等).但是我不知道如何将它移植到C#.我已经尝试过MemoryStream类,但是没有方法可以在字节数组的末尾放置特定的类型.

问题:C#中Java的"ByteBuffer.putType(value)"的等价物是什么?谢谢!

c# java bytebuffer memorystream

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

在 Java NIO 中使用 ByteBuffer 读写 Int

我想使用 Java NIO API 中的数据报通道通过网络传输一个 int 数组。但是,读/写函数只能将 aByteBuffer作为输入。所以我需要将 int 数据存储到 aByteBuffer然后在接收器处读回。我面对java.nio.BufferUnderflowException. 这是我在发送方所做的:

for(i = 0; i < send_data.length; i++)
{
          //Write the data onto Buffer
          ByteBuffer buffer1 = ByteBuffer.allocate(send_data[i].length*4);
          for(j = 0; j < send_data[i].length; j++)
                     buffer1.putInt(send_data[i][j]);
          buffer1.flip();
          //Transmit the data
          while(buffer1.hasRemaining())
                 channel.write(buffer1);
}
Run Code Online (Sandbox Code Playgroud)

这里send_data是一个二维数组,其中每一行都被视为一个单独的数据包。

在接收端

for(i = 0; i < k; i++)
{
           ByteBuffer buffer = ByteBuffer.allocate((recvpkt[0].length)*4);
           channel.receive(buffer);
           j = 0;
           while(buffer.hasRemaining())
           {
                  recvpkt[i][j] = buffer.getInt();
                  j = j+1;
           }
 } …
Run Code Online (Sandbox Code Playgroud)

java networking nio bytebuffer data-conversion

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

字节缓冲区到 GWT 中的字符串

PlayN项目中,我有以下 Java 代码

import com.google.common.base.Charsets;
import java.nio.ByteBuffer;

ByteBuffer msg = ... // a ByteBuffer that contains a String
String s = Charsets.UTF_8.decode(msg).toString();
Run Code Online (Sandbox Code Playgroud)

这在 Java 中运行良好,但是当我尝试使用 GWT 编译它时,我得到:

The method decode(ByteBuffer) is undefined for the type Charset

在 GWT 中,获取 ByteBuffer 中的字符串(以 UTF-8 编码)的正确方法是什么?

gwt bytebuffer playn

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

如何在C中将wchar_t转换为BYTE*

我想在通过流发送之前将wchar_t变量转换为BYTE *a.

我有

wchar_t val[] = L"abc";
Run Code Online (Sandbox Code Playgroud)

我尝试使用:

BYTE * bytes = (BYTE *)val;
Run Code Online (Sandbox Code Playgroud)

我读字节时没有所有字符; 我只有第一个角色 - "a"

我想,我不能很好地转换wchar_t.

我究竟做错了什么?

编辑:

static void DASH_process_receive(rdpSvcPlugin* plugin, wStream* data_in)
    int bytes;
    wStream* data_out;
    DASHPlugin* DASH = (DASHPlugin*) plugin;

    fprintf(stderr, "DASH_process_receive:\n");

    if (!DASH)
    {
        fprintf(stderr, "DASH_process_receive: DASH is nil\n");
        return;
    }

    /* process data in (from server) here */
    /* here we just send the same data back */

    bytes = Stream_Capacity(data_in);
    fprintf(stderr, "DASH_process_receive: got bytes %d\n", …
Run Code Online (Sandbox Code Playgroud)

c byte bytebuffer character-encoding

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

为什么我们在 OpenGL (ES) android 中以字节为单位分配块而不是浮点数,尽管我们大部分时间都使用浮点数

这就是我如何制作一个三角形数组

float[] tableVerticesWithTriangle = {

                    // triangle 1
                    0f, 0f, 9f, 14f, 0f, 14f,

                    // triangle 2
                    0f, 0f, 9f, 0f, 9f, 14f

            };
Run Code Online (Sandbox Code Playgroud)

这就是我在本机环境中分配块的方式

 vertexData = ByteBuffer
                .allocateDirect(
                        tableVerticesWithTriangle.length * BYTES_PER_FLOAT)
                .order(ByteOrder.nativeOrder()).asFloatBuffer();
 vertexData.put(tableVerticesWithTriangle);
Run Code Online (Sandbox Code Playgroud)

android bytebuffer allocation opengl-es floatbuffer

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

Java:String.getBytes(Charset) Vs。用于 OutputStream 的 Charset.encode(String)

我的算法有两个输入:

  • 1 utf8 将被编码的字符串对象
  • 1 Charset 对象,它指示我需要将字符串编码成什么

最后,返回的结果将被放入一个 OutputStream 中,这个动作可能会发生多次,但至少一次。在这种情况下没有发生多线程。

我找到了两个解决方案:

  1. 在给定的 String 上调用 getBytes(Charset) 并提供给定的 Charset。这将返回一个字节[]
  2. 在给定的字符集上调用 encode(String) 并提供给定的字符串。这将返回一个 ByteBuffer。

深入研究这些方法背后的代码显示了每个底层算法的复杂设计。我不能说我明白如何在这两个选项之间做出选择。

  1. 调用任一方法是否存在显着的性能差异?
  2. 将结果放入 OutputStream 是否有显着的性能差异?
  3. 足迹是否有显着差异?

哪种解决方案通常是更好的选择?

java string encoding bytebuffer character-encoding

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

如何从 hyper::client::Request 正确读取字节序列并将其作为 UTF-8 字符串打印到控制台?

我正在探索 Rust 并尝试发出一个简单的 HTTP 请求(使用 hyper crate)并将响应正文打印到控制台。响应实现std::io::Read. 阅读各种文档来源和基本教程,我得到了以下代码,我使用以下代码编译和执行RUST_BACKTRACE=1 cargo run

use hyper::client::Client;
use std::io::Read;

pub fn print_html(url: &str) {
    let client = Client::new();
    let req = client.get(url).send();

    match req {
        Ok(mut res) => {
            println!("{}", res.status);

            let mut body = String::new();

            match res.read_to_string(&mut body) {
                Ok(body) => println!("{:?}", body),
                Err(why) => panic!("String conversion failure: {:?}", why)
            }
        },
        Err(why) => panic!("{:?}", why)
    }
}
Run Code Online (Sandbox Code Playgroud)

预期的:

由 HTTP 服务器传送的正文的一个漂亮的、人类可读的 HTML 内容被打印到控制台。

实际的:

use hyper::client::Client;
use std::io::Read;

pub …
Run Code Online (Sandbox Code Playgroud)

bytebuffer utf-8 rust

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

如何在Android中将ByteBuffer转换为图像

我通过套接字接收jpg图像,它作为ByteBuffer发送,我正在做的是:

        ByteBuffer receivedData ;
        // Image bytes
        byte[] imageBytes = new byte[0];
        // fill in received data buffer with data
        receivedData=  DecodeData.mReceivingBuffer;
        // Convert ByteByffer into bytes
        imageBytes = receivedData.array();
        //////////////
        // Show image
        //////////////
        final Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length);
        showImage(bitmap1);
Run Code Online (Sandbox Code Playgroud)

但是发生的事情是无法解码imageBytes并且位图为null。

我也得到了imagebytes作为:imageBytes:{-1,-40,-1,-32,0,16,74,70,73,70,0,1,1,1,0,96,0,0,0 ,0,-1,-37,0,40,28,30,35,+10,478更多}

有什么问题吗?是解码问题吗?或从ByteBuffer转换为Byte数组?

在此先感谢您的帮助。

android bytebuffer image bytearray bitmap

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

ByteBuffer到Java中的String

我有这行代码

String s = new String(m_buffer.array());
Run Code Online (Sandbox Code Playgroud)

其中buffer是ByteBuffer.

有没有办法将bytebuffer转换为字符串而不分配新的String和/或涉及复制char数组?(也就是说,有没有办法将String的char []值安全地指向ByteBuffer的byte [] hb?)

谢谢

java bytebuffer

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

java bytebuffer slice不能按照文档工作

我一直在使用字节缓冲区,但很少使用切片。但是现在我们slice()在 on 上遇到了一个大问题bytebuffer

请看下面的代码:

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.Arrays;

public class Test12 {

    public static void main(String[] args) throws UnsupportedEncodingException {

        ByteBuffer original = ByteBuffer.wrap("234567".getBytes("UTF-8"));
        printBuffer("org: ",original);

        original.position(1);
        original.limit(original.limit()-2);

        printBuffer("org: ",original);


        ByteBuffer sliced =  original.slice();
        printBuffer("slc: ",sliced);

        ByteBuffer duplicated =  original.duplicate();
        printBuffer("dup: ",duplicated);

        ByteBuffer compact =  original.compact();
        printBuffer("cmp: ",compact); 
    }


    private static  void printBuffer(String prefix,ByteBuffer buff) 
    {
        System.out.println(prefix+buff);
        System.out.println(prefix+Arrays.toString(Arrays.copyOfRange(buff.array(), buff.position(), buff.limit())));

    }

}
Run Code Online (Sandbox Code Playgroud)

它导致

org: java.nio.HeapByteBuffer[pos=0 lim=6 cap=6]
org: [50, 51, 52, 53, 54, 55] …
Run Code Online (Sandbox Code Playgroud)

java bytebuffer

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