gpt4 book ai didi

来自套接字的 Java 堆内存错误

转载 作者:行者123 更新时间:2023-11-29 03:51:15 25 4
gpt4 key购买 nike

我正在尝试打开一个套接字并进行监听。然后,用 PHP 编写的客户端将发送 XML 请求。目前,我只是将字符串“test”发送给它,但出现了内存堆错误。

这是我的服务器 java 代码:

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class main {

/**
* @param args
*/
public static void main(String[] args) {
server();

}

public static void server() {
ServerSocket MyService = null;
try {
MyService = new ServerSocket(3030);
}
catch (IOException e) {
System.out.println(e);
}

Socket serviceSocket = null;
try {
serviceSocket = MyService.accept();
}
catch (IOException e) {
System.out.println(e);
}

DataInputStream in;
try {
in = new DataInputStream(serviceSocket.getInputStream());
System.out.println("DEV STEP 1");
int len = in.readInt();
System.out.println(len);
byte[] xml = new byte[len];
in.read(xml, 0, len);
//System.out.print(xml.toString());
//Document doc = builder.parse(new ByteArrayInputStream(xml));

}
catch (IOException e) {
System.out.println(e);
}

}

}

我得到的错误是:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at main.server(main.java:39)
at main.main(main.java:12)

我进行了搜索,这里有很多关于此错误的解释,但是我无法弄清楚为什么当我发送一个 4 个字母的字符串时,len 是 1952805748。

最佳答案

你会遇到内存不足错误,因为 len 太大了。如果您将数据作为字符发送,然后对其执行 readInt(),那么这就是导致您出现问题的原因。您需要将数据作为字符读取。

您的有效数字可能是字符串“test”的二进制。您应该只从 InputStream 中读取一个字符串,不确定为什么需要 DataInputStream 因为它支持读取二进制等,而这不是您正在做的。只需使用 BufferedInputStream 然后对其进行正常读取即可。

关于来自套接字的 Java 堆内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8706813/

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