gpt4 book ai didi

java - 为什么我的程序卡在 DatagramPacket.getData() 的 system.out.print 上

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

LinkedList<DatagramPacket> queue = new LinkedList<DatagramPacket>();

for (int i = 0; i < queue.size(); i++)
{
System.out.println("1: This prints.");
System.out.println("2: This doesn't: " + new String(queue.get(i).getData()));
int start = (new String(queue.get(i).getData())).indexOf("\r\n") + "\r\n".length();
data.concat(new String(queue.get(i).getData()).substring(start));
}

我们正在尝试从队列(数据包列表)中获取所有数据,并将它们全部放入一个字符串中。

但是每当到达第二个 println(与其下面的行相同)时,程序就会挂起并且不执行任何操作。

没有 getData() 打印也能正常工作。例如。

System.out.printlin("2: This doesn't: " +  new String(queue.get(i)));

此外,每当我将数据包添加到队列中时,我都会立即打印队列中的最后一个数据包,这样就可以了。

public void addPacket(DatagramPacket additional)
{
queue.add(additional);
System.out.println("1: " + new String(queue.getLast().getData()));
}

最佳答案

我不确定 DatagramPacket 类,但这确实修复了与 String 操作和 LinkedList.get 相关的一些性能问题。可能只是你的程序运行得很慢?

StringBuilder dataBuilder = new StringBuilder(); 
Iterator<DatagramPacket> queueIter = queue.iterator();
while(queueIter.hasNext()) {
DatagramPacket next = queueIter.next();
System.out.println("1: This prints.");
System.out.println("2: This doesn't: " + new String(next.getData()));
int start = (new String(next.getData())).indexOf("\r\n") + "\r\n".length();
dataBuilder.append(new String(next.getData()).substring(start));
}
data = dataBuilder.toString();
<小时/>

如果你尝试这样做会怎样:

public class Foo {
// instead of LinkedList<DatagramPacket>
public LinkedList<String> queue = new LinkedList<String>();
public void addPacket(DatagramPacket additional) {
queue.add(new String(additional.getData()));
}
}
}

关于java - 为什么我的程序卡在 DatagramPacket.getData() 的 system.out.print 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13652944/

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