gpt4 book ai didi

java - 当我从套接字接收到一些数据时,为什么会附加大量空格?

转载 作者:行者123 更新时间:2023-12-01 08:13:31 25 4
gpt4 key购买 nike

嗨,我正在编写一个简单的 java 程序来从套接字读取数据,但遇到了一个问题,在每次输入后我都会出现很多空格。

目标:编写一个简单的服务器套接字,它可以从客户端套接字读取正确的数据。

到目前为止:我已经能够编写从套接字读取的代码,甚至能够读取数据,但问题是我在末尾有很多空格。

所以我最终不得不使用trim()来管理空间,但我仍然不知道这是对还是错。

非常感谢您对此的意见。

注意:我使用 windows7 telnet 服务连接到套接字。

readSocket() {
System.out.println(client_socket);
try {
System.out.println("reading socket");
/*BufferedReader brIn = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
String inputLine = null;
while ((inputLine = brIn.readLine()) != null) {
System.out.println(inputLine);
}*/
InputStream is = client_socket.getInputStream();
byte[] byteArr = new byte[1024];
int inputsize = -1;
int currentPos = 0;
StringBuffer sb = new StringBuffer(11111);
/*while((inputsize = is.read(byteArr)) != -1) {
String processed = new String(byteArr);
sb.append(processed);
}*/
int BUFFER_SIZE = 1024;
int read;
byte[] buffer = new byte[BUFFER_SIZE];
String processed = "";
while ((read = is.read(byteArr, 0, BUFFER_SIZE)) != -1) {
String current = new String(byteArr);
//os.write(buffer, 0, read);
System.out.println("current Process "+current);

//processed +=current;
sb.append(current.toString().trim());
}
System.out.println("Socket input is : "+sb.toString());
System.out.println("Sending response to client "+processed.toString());
//client_socket.getOutputStream().write(sb.toString().getBytes());
//client_socket.getOutputStream().close();

FileOutputStream fos = new FileOutputStream(new File("C:\\Users\\himanshu2100\\eee.txt"));
fos.write(processed.getBytes());
fos.close();
is.close();
client_socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

根据 Roger Lindsjö 和 mprivat 的建议,我重新设计了从流中读取内容的部分。

readSocket() {
System.out.println(client_socket);
try {
System.out.println("reading socket");
InputStream is = client_socket.getInputStream();
byte[] byteArr = new byte[1024];

int read;
int BUFFER_SIZE = 1024;

ByteArrayOutputStream baos = new ByteArrayOutputStream();

while ((read = is.read(byteArr, 0, BUFFER_SIZE)) != -1) {
baos.write(byteArr, 0, read); //This is an optimized design, instead of having so many strings
}
System.out.println("Output is :"+new String(baos.toByteArray()));
baos.close();
is.close();
client_socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

我希望这是一个更好的解决方案,所以发布它。欢迎提出建议。

最佳答案

在这一行:while ((read = is.read(byteArr, 0, BUFFER_SIZE)) != -1) {

read 将包含实际读取的字节数,因此,如果您的服务器发送字符串“CORRECT”,但您的 BUFFER_SIZE 为 1024,那么您将有很多额外的空间,所以你不能这样做:String current = new String(byteArr);。相反,您必须仅使用从流中读取的字节:

String current = new String(byteArr, 0, read);

关于java - 当我从套接字接收到一些数据时,为什么会附加大量空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15408444/

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