-1

我目前正在尝试对DatagramPacket.getData()调用结果执行一些正则表达式。

实现为String myString = new String(thepkt.getData())

但奇怪的是,java 放弃了它用来封装所有数据的结束引号(见下面的链接图片)。

当我在调试会话期间单击变量检查器中的字段并且不更改任何内容时,当我单击变量字段时,它会再次自行更正,而无需我进行任何更改。它甚至以黄色突出显示可变检查字段以表示更改。它的值也显示为它仍然是一个字节数组而不是一个字符串对象

http://i.imgur.com/8ZItsZI.png

它抛弃了我的正则表达式,我看不到任何会导致它的东西。这是一个客户端服务器模拟,在客户端,getData 返回数据没有问题。

4

2 回答 2

0

我通过使用以下提供的解决方案使其工作:

https://stackoverflow.com/a/8557165/1700855

但是我仍然不明白如何不将数据包的长度指定给 String 构造函数会导致它删除系统结束双引号。任何人都可以提供解释,因为我真的很想在继续之前了解我的问题的解决方案:)

于 2013-03-30T08:55:33.440 回答
0

问题是您没有阅读 DatagramPacket.getData 的规范:

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

所以,为了正确,你应该使用

new String(thepkt.getData(), thepkt.getOffset(), thepht.getLength())

或者,不使用默认字符集:

new String(thepkt.getData(), thepkt.getOffset(), thepht.getLength(), someCharset)

于 2013-03-30T12:46:23.340 回答