NumberFormatException错误

NumberFormatException错误

希望这是一个非常简单的查询,但这让我挠头。

我有一个字符串,它只是一个整数,因此我试图将该整数作为一个整数取出。从表面上看这应该不是问题。

// this is how I create the string (it's the playload from a UDP datagram packet,
// thought I don't think the origins hugely important - it's juts a test run so the
// stringMessage is always 1 (created by a seperate client process)

  ...
  recvSoc.receive(pac);
  String stringMessage = new String(pac.getData());
  port = pac.getPort();
  System.out.println("RECEIVED: " + stringMessage + " on port:  " + port);
  processMessage(stringMessage);
  ...

// Then in processMessage

public void processMessage(String data) {
  int message;
  message = Integer.parseInt(data);
  ...

这始终会因NumberFormatException错误而崩溃。我一生无法弄清楚是什么原因造成的,任何想法都值得赞赏。我最近没有用Java编写太多代码,因此可能只是忘记了一些关键的东西或什么都不重要。
Exception in thread "main" java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:514)
at udp.UDPServer.processMessage(UDPServer.java:85)
at udp.UDPServer.run(UDPServer.java:52)
at udp.UDPServer.main(UDPServer.java:156)

最佳答案

注意 DatagramPackate.getData() 返回整个缓冲区!

您收到的数据只是其中的一部分:

接收到的数据或要发送的数据从缓冲区中的offset开始,并且运行了很长时间length

因此,要将数据转换为String,应使用this constructor:

String message = new String(pac.getData(), pac.getOffset(), pac.getLength(), "UTF-8");

请注意,我在此处指定UTF-8编码,因为未指定编码将导致使用平台默认编码,这通常不是您想要的。

07-25 23:40