gpt4 book ai didi

java - 通过ByteBuffer传输字符串

转载 作者:行者123 更新时间:2023-12-01 04:52:00 28 4
gpt4 key购买 nike

我需要通过字节缓冲区传输 2 个整数和 1 个字符串。然后通过bytebuffer接收另一个字符串。

一定有这样的事情:从键盘读取 x (int)。回车。从键盘读取 y (int)。回车。从键盘读取字符串。进入。所有值都到达某处,正在处理,我必须接收该字符串。一切都是通过套接字 channel 完成的。

我做了这样的事情:发送

Scanner scanner=new Scanner(System.in);
int m,n;
String str,result;
System.out.println("x=");
m=scanner.nextInt();
System.out.println("y=");
n=scanner.nextInt();
System.out.println("String: ");
str=scanner.next();

ByteBuffer bb=ByteBuffer.allocate(100);

bb.putInt(0,m).putInt(8,n).put(str.getBytes()); // problem?

try{

sc.write(bb);
bb.clear();
sc.read(bb);

CharBuffer cbuf = bb.asCharBuffer();
result=cbuf.toString();

System.out.println("Result : "+result);

接收:

   ByteBuffer bb = ByteBuffer.allocate(100);    
socketChannel.read(bb);
int m=bb.getInt(0);
int n=bb.getInt(8);
String str=bb.toString().substring(16);

App app=new App();
String result=app.longestRepeatingSubstring(str,m,n);
bb.clear();

bb.put(result.getBytes());

socketChannel.write(bb);
socketChannel.close();

但我收到一个空字符串...

或者如果我直接输入 bb.toString() 我会收到如下内容:java.nio.HeapByteBuffer[pos=237 lim=258 cap=798]

最佳答案

bb.putInt(0,m).putInt(8,n).put(str.getBytes()); // problem?

是的问题put(str.getBytes())依赖于之前设置的缓冲区中的位置,但因为您使用的是偏移量putInt函数,所以它不会。

bb.putInt(0,m).putInt(8,n).position(16).put(str.getBytes()).position(0);

此行不适用于您的客户端 ByteBuffer.toString() 返回缓冲区状态而不是内容,

而不是

String str=bb.toString().substring(16);

你想要

byte[] b = new byte[length];
bb.position(16);
bb.get(b);
String str=new String(b);

关于java - 通过ByteBuffer传输字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14802769/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com