Java 相当于 perl unpack 函数

标签 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.

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

在服务器端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)。我已经在 google 上搜索过这个问题,它似乎不是像 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.

最佳答案

可能 JBBP可以是这样的

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

关于Java 相当于 perl unpack 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24400787/

相关文章:

perl - 如何使用 Mechanize 访问 wigle.net 上的后续结果页面?

Perl int 函数和填充零

regex - Perl 正则表达式 : count leading substrings

regex - 正则表达式是否尝试匹配文本中字符之间的位置?

perl - 如何在 Moose 中定义默认属性属性值?

java - 用一些预定义的值初始化 ArrayList

Java - 如何确定服务器是 FTP 还是 SFTP?

java - Spring 启动 : Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean

java - 用 Java 实现的 str_pad

java - 我该怎么做才能修复 java.lang.StringIndexOutOfBoundsException?