我试图通过从Java移植代码来格式化C#中的字节数组.在Java中,使用方法"buf.putInt(value);",buf.putShort,buf.putDouble,(等等).但是我不知道如何将它移植到C#.我已经尝试过MemoryStream类,但是没有方法可以在字节数组的末尾放置特定的类型.
问题:C#中Java的"ByteBuffer.putType(value)"的等价物是什么?谢谢!
我想使用 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) 在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 编码)的正确方法是什么?
我想在通过流发送之前将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) 这就是我如何制作一个三角形数组
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) 我的算法有两个输入:
最后,返回的结果将被放入一个 OutputStream 中,这个动作可能会发生多次,但至少一次。在这种情况下没有发生多线程。
我找到了两个解决方案:
深入研究这些方法背后的代码显示了每个底层算法的复杂设计。我不能说我明白如何在这两个选项之间做出选择。
哪种解决方案通常是更好的选择?
我正在探索 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) 我通过套接字接收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数组?
在此先感谢您的帮助。
我有这行代码
String s = new String(m_buffer.array());
Run Code Online (Sandbox Code Playgroud)
其中buffer是ByteBuffer.
有没有办法将bytebuffer转换为字符串而不分配新的String和/或涉及复制char数组?(也就是说,有没有办法将String的char []值安全地指向ByteBuffer的byte [] hb?)
谢谢
我一直在使用字节缓冲区,但很少使用切片。但是现在我们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) bytebuffer ×10
java ×5
android ×2
allocation ×1
bitmap ×1
byte ×1
bytearray ×1
c ×1
c# ×1
encoding ×1
floatbuffer ×1
gwt ×1
image ×1
memorystream ×1
networking ×1
nio ×1
opengl-es ×1
playn ×1
rust ×1
string ×1
utf-8 ×1