java如何中断while_java - while(true)循环没有中断 - 堆栈内存溢出

这篇博客探讨了一位新手在解析Evercam Android应用源代码时遇到的问题,特别是涉及到while(true)循环的部分。代码片段显示了一个可能的无限循环,但实际上通过检查条件并使用continue语句避免了这种情况。当接收到特定条件时,循环会继续执行,否则会添加新发现的设备到列表中。博客强调了解析编译后的代码可能导致误解,并提醒读者依赖原始源代码的重要性。
摘要由CSDN通过智能技术生成

我是Java编程的新手。 目前我正在研究一个名为Evercam的Android应用程序的源代码。 但是,我在理解涉及while(true)循环的代码的一部分时遇到了问题。

这是代码的片段:

while (true)

{

while (true)

{

byte[] responseMessageByteArray = new byte[4000];

DatagramPacket datagramPacketRecieve = new DatagramPacket(responseMessageByteArray, responseMessageByteArray.length);

datagramSocket.receive(datagramPacketRecieve);

String responseMessage = new String(datagramPacketRecieve.getData());

EvercamDiscover.printLogMessage("\nResponse Message:\n" + responseMessage);

StringReader stringReader = new StringReader(responseMessage);

InputNode localInputNode = NodeBuilder.read(stringReader);

EnvelopeProbeMatches localEnvelopeProbeMatches = (EnvelopeProbeMatches)(new Persister()).read(EnvelopeProbeMatches.class, localInputNode);

if (localEnvelopeProbeMatches.BodyProbeMatches.ProbeMatches.listProbeMatches.size() > 0)

{

ProbeMatch localProbeMatch = (ProbeMatch) localEnvelopeProbeMatches.BodyProbeMatches.ProbeMatches.listProbeMatches.get(0);

if (uuidArrayList.contains(localProbeMatch.EndpointReference.Address))

{

EvercamDiscover.printLogMessage("ONVIFDiscovery: Address " + localProbeMatch.EndpointReference.Address + " already added");

}

else

{

uuidArrayList.add(localProbeMatch.EndpointReference.Address);

DiscoveredCamera discoveredCamera = getCameraFromProbeMatch(localProbeMatch);

if (discoveredCamera.hasValidIpv4Address())

{

this.onActiveOnvifDevice(discoveredCamera);

cameraList.add(discoveredCamera);

}

}

}

}

}

这不会产生无限循环吗? 我在Java中的基础知识并不强,所以如果有人可以在什么情况下判断一段while(true){//codes}实际退出而没有任何中断或它是否会退出,我将非常感激?

编辑

我实际上从android项目文件直接反编译提取这个片段是不好的。 我不知道它会有所不同,然后我知道的很少。 这是原始代码 :

public ArrayList probe() { ArrayList cameraList = new ArrayList(); try { DatagramSocket datagramSocket = new DatagramSocket(); datagramSocket.setSoTimeout(SOCKET_TIMEOUT); InetAddress multicastAddress = InetAddress.getByName(PROBE_IP); if (multicastAddress == null) { // System.out.println("InetAddress.getByName() for multicast returns null"); return cameraList; } // Send the UDP probe message String soapMessage = getProbeSoapMessage(); // System.out.println(soapMessage); byte[] soapMessageByteArray = soapMessage.getBytes(); DatagramPacket datagramPacketSend = new DatagramPacket( soapMessageByteArray, soapMessageByteArray.length, multicastAddress, PROBE_PORT); datagramSocket.send(datagramPacketSend); ArrayList uuidArrayList = new ArrayList(); while (true) { // System.out.println("Receiving..."); byte[] responseMessageByteArray = new byte[4000]; DatagramPacket datagramPacketRecieve = new DatagramPacket( responseMessageByteArray, responseMessageByteArray.length); datagramSocket.receive(datagramPacketRecieve); String responseMessage = new String( datagramPacketRecieve.getData()); EvercamDiscover.printLogMessage("\\nResponse Message:\\n" + responseMessage); StringReader stringReader = new StringReader(responseMessage); InputNode localInputNode = NodeBuilder.read(stringReader); EnvelopeProbeMatches localEnvelopeProbeMatches = new Persister() .read(EnvelopeProbeMatches.class, localInputNode); if (localEnvelopeProbeMatches.BodyProbeMatches.ProbeMatches.listProbeMatches .size() <= 0) { continue; } ProbeMatch localProbeMatch = localEnvelopeProbeMatches.BodyProbeMatches.ProbeMatches.listProbeMatches .get(0); // EvercamDiscover.printLogMessage("Probe matches with UUID:\\n" // + // localProbeMatch.EndpointReference.Address + " URL: " + // localProbeMatch.XAddrs); if (uuidArrayList .contains(localProbeMatch.EndpointReference.Address)) { EvercamDiscover.printLogMessage("ONVIFDiscovery: Address " + localProbeMatch.EndpointReference.Address + " already added"); continue; } uuidArrayList.add(localProbeMatch.EndpointReference.Address); DiscoveredCamera discoveredCamera = getCameraFromProbeMatch(localProbeMatch); if (discoveredCamera.hasValidIpv4Address()) { onActiveOnvifDevice(discoveredCamera); cameraList.add(discoveredCamera); } } } catch (Exception e) { // ONVIF timeout. Don't print anything. }

原来在实际代码中有continue语句。 非常感谢你的回复,我会记得不应该依赖于解编译的类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值