【问题标题】:How can I send data in binary form over a Java socket?如何通过 Java 套接字以二进制形式发送数据?
【发布时间】:2011-04-21 08:48:19
【问题描述】:

我见过很多通过 Java 套接字发送序列化数据的示例,但我只想发送一些简单的整数和字符串。而且,问题是我正在尝试将这些信息传达给用 C 编写的二进制文件。

那么,底线是:我怎样才能在 Java 中通过套接字发送一些字节?

【问题讨论】:

  • 您确定 C 程序和 Java 程序对待二进制整数和字符串的方式相同吗?如果不是,请将它们作为普通的旧文本发送。如果您无法控制读取套接字的 C 程序,那么您将别无选择,只能以 C 程序想要的任何格式发送数据。

标签: java sockets binary


【解决方案1】:

您可以使用Socket 给出的简单OutputStream
从那里你可以write字节。

如果您愿意,您还可以将此流封装在 BufferedOutputStream 中以获得缓冲区。

【讨论】:

    【解决方案2】:

    我真的建议不要直接使用 Java Sockets 库。我发现 Netty(来自 JBoss)非常容易实现并且非常强大。 Netty ChannelBuffer 类提供了许多用于编写不同数据类型的选项,当然,如果您愿意,还可以编写自己的编码器和解码器来将 POJO 写入流中。

    这个页面是一个非常好的入门 - 我能够在 30 分钟内使用自定义编码器和解码器制作一个相当复杂的客户端/服务器:http://docs.jboss.org/netty/3.2/guide/html/start.html

    如果您真的想使用 Java 套接字。套接字输出流可以包装在 DataOutputStream 中,它还允许您编写许多不同的数据类型,例如:

    new DataOutputStream(socket.getOutputStream()).writeInt(5);
    

    希望对你有用。

    【讨论】:

    • DataOutputStream 似乎工作得很好。我的工作日结束了,我明天再来。
    • 请注意,本教程的链接适用于 Netty 的 JBoss 版本。这与教程链接到的 netty.io 下载的 API 不匹配。请改用netty.io/wiki/user-guide-for-4.x.html
    【解决方案3】:

    我建议查看Protocol Buffers 进行序列化,查看ZeroMQ 进行数据传输。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-08
      • 2017-03-05
      • 2012-08-23
      • 2013-08-21
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多