Java相当于perl unpack函数

时间:2014-06-25 05:25:48

标签: java perl

我有一个perl代码(比如客户端),它将打包数据作为HTTP POST发送到另一个在apache mod_perl模块(比如服务器)上运行的perl代码。

在客户端,我有这样的包函数,

$postData = pack("N a*", length($metaData), $metaData);

从perl pack文档看来,

N -> An unsigned long (32-bit) in "network" (big-endian) order.
a -> A string with arbitrary binary data, will be null padded.

现在使用perl LWP用户代理将$ postData发送到服务器。

在服务器端perl,我们曾经像这样解压缩,

# first reading the metaData Length
my $buf;
$request->read($buf, 4); #$request is apache request handler
my $metaDataLength = unpack("N", $buf);

# now read the metaData itself
$request->read($buf, $metaDataLength);

现在我必须在java中执行此服务器端数据解析(出于某些原因远离perl)。我搜索谷歌这个,它似乎不是像perl那样的单行解决方案。有人建议写我们自己的解包功能。我使用的是java 1.7版本。

对于上述服务器端数据解析,java中是否有任何简单的解决方案?

编辑:感谢Elliot提供的“ByteBuffer”创意。以下代码对我来说很好,

InputStream is = request.getInputStream(); //request is HTTPServletRequest
byte[] bArr = new byte[4]; //reading first 4 bytes to get metaDataLength
int bytesRead = is.read(bArr);
ByteBuffer buf = ByteBuffer.wrap(bArr);
int metaDataLength = buf.getInt(); //shows value matches with clientside perl code.

1 个答案:

答案 0 :(得分:0)

可能JBBP可以是这样的

final int value = JBBPParser.prepare("int;").parse(theInputStream).findFieldForType(JBBPFieldInt.class).getAsInt();