【问题标题】:converting streams to blocks of strings and vice-versa将流转换为字符串块,反之亦然
【发布时间】:2011-02-18 12:10:20
【问题描述】:

我开发了一个 java/scala XMPP 客户端应用程序,它使用(比如)write 方法异步发送数据并使用listener 方法接收数据。 listener 方法以离散 XMPP 消息包的形式接收数据,并使用 processPacket 方法处理它们(我可以根据我想要对接收到的数据做什么来修改)

我想连接一个从inputstream 读取数据并写入outputstream 的第三方库。具体来说,我希望使用通过我的listener 方法接收到的数据来模拟第三方库的inputstream,并通过我的write 方法来模拟outputstream

最简单的方法是什么?我知道这需要从流转换为字符串块,反之亦然。一些提示将不胜感激。

XMPP 消息包结构如下(但如果需要可以更改):

<message to = ... from = ...><body>data</body></message>

【问题讨论】:

标签: java scala xmpp inputstream outputstream


【解决方案1】:

使用ByteArrayInputStream 为给定的字符串创建输入流。您必须考虑编码,因为您发送的是字节而不是字符。

String text = message.getBody();  // that's what you need?
InputStream is = new ByteArrayInputStream(text.getBytes("UTF-8"));

反过来,你写一个ByteArrayOutputStream 并从它的字节创建一个新的字符串:

String text = new String( baos.toByteArray(), "UTF-8" );

再一次 - 不要忘记考虑字符编码。

【讨论】:

  • 问题是流是连续的,而消息包是离散的,所以我必须在制作流之前考虑分段和重组。此外,我想在收到数据后立即处理数据,而不是等待流结束。 (流可以是几兆字节,数据包大小限制约为 2000 字节。)
猜你喜欢
  • 2011-05-27
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多