Java-эквивалент функции распаковки Perl

1

У меня есть код perl (скажем, клиент), который отправляет упакованные данные как HTTP POST в другой код perl, запущенный на модуле apache mod_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 User Agent.

На стороне сервера 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 для анализа данных на стороне сервера выше?

Редактировать: Спасибо Эллиот за идею "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.
  • 0
    Вы можете начать с Джерла .
  • 0
    @ElliottFrisch, так как мы планировали отойти от Perl, я не думаю, что «jerl» - это правильный путь. Можете ли вы предложить что-нибудь для этого «распаковать» в одиночку в Java?
Показать ещё 5 комментариев
Теги:

1 ответ

0

потенциально JBBP может быть таким

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню