【问题标题】:Getting a 32-bit preceding value from standard input in Java从 Java 中的标准输入获取 32 位前值
【发布时间】:2017-09-26 21:06:39
【问题描述】:

我正在尝试从 WebExtentions 应用程序中读取标准输入。文档说:

每条消息都使用 JSON 进行序列化,采用 UTF-8 编码,前面有一个 32 位值,其中包含按本机字节顺序排列的消息长度。

https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Native_messaging

他们有一个 Python 示例来读取发送的消息:

rawLength = sys.stdin.read(4)
if len(rawLength) == 0:
  sys.exit(0)
messageLength = struct.unpack('@I', rawLength)[0]
message = sys.stdin.read(messageLength)
return json.loads(message)

所以它从消息中删除 32 位数字,然后获取消息。我怎样才能在 Java 中做同样的事情?

编辑有人要求我尝试翻译。请注意,我知之甚少。

System.in.skip(4); // 4 bytes is 32 bits
Scanner sc = new Scanner(System.in);
String message = sc.next();

并且它不会从消息中删除 4 个四个字节。我唯一的其他解决方案是找到消息中的最后一个 { 符号(因为它是一个只有一个 key : value 对的 JSON 对象),然后获取子字符串。

【问题讨论】:

  • 几乎相同的方式,但使用Java的io api?你具体要问什么?
  • @bhspencer 这不是骗人的,那个问题是关于读取整数的 ascii 表示,这个不是。
  • 我猜想写一些java代码?但不确定。
  • 提示:这不是免费的代码翻译服务。向我们展示您自己尝试解决的问题。

标签: java stdin


【解决方案1】:

要将标准输入的前 4 个字节作为 32 位 int 读取,请执行以下操作:

DataInputStream data = new DataInputStream(System.in);
int length = data.readInt();

【讨论】:

    猜你喜欢
    • 2020-01-20
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2020-01-22
    • 2020-01-09
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多