flink套接字源代码-用utf编码的字不能被flink读取

iovurdzv  于 2021-06-25  发布在  Flink
关注(0)|答案(2)|浏览(305)

我试着让flink从套接字连接读取一些流式文本输入。
在我的输入套接字代码中,我使用以下命令发布文本供flink接收:

outputStream.writeUTF(new String(message.getPayload()));

然而,在flink中,即使连接正常,我也无法阅读传入的文本。我在google-d上搜索,发现我可能需要使用 readUTF() . 换句话说,这主要是由于编码。但是,这些都是在 InputStream ; Flink没有,因为我的输入是以 DataStream<String> :

DataStream<String> text = env.socketTextStream("localhost", port, "\n");

有人能给我一些建议吗?谢谢您!

e0uiprwp

e0uiprwp1#

writeUTF() 不会产生“用utf编码的单词”。它产生一种特定的格式,带有一个16位长度的字前缀 readUTF() 我能理解。如果你不想用 readUTF() 你不能使用 writeUTF() 任何一个。使用 writeBytes() 或者其他适合你阅读的代码。

yh2wf1be

yh2wf1be2#

你的计划要完成什么?这些是flink的用例,如果您不想实现其中一个,我建议您在进行低级网络通信时使用javasockets
如果使用java,就相当简单了。您需要从套接字获取数据输入流,然后将传入的字节转换回字符串。例如,以下是对我有效的方法

Socket socket = new Socket(HOST_IP, PORT);

DataInputStream in = new DataInputStream(socket.getInputStream());
byte[] buffer = new byte[256];
while ((i = in.read(buffer, 0, buffer.length)) != -1)
{
    String input = new String(buffer, "UTF-8");
}

相关问题