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));
}
我们正在尝试从数据包列表queue
中获取所有数据,并将它们全部放入一个字符串中。
但是当它到达第二个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()));
}
答案 0 :(得分:1)
我不确定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()));
}
}
}