Java Flink套接字源-Flink无法读取UTF编码的字
我试图让Flink从套接字连接读取一些流式文本输入 在我的输入套接字代码中,我使用以下命令发布文本,以便Flink接收:Java Flink套接字源-Flink无法读取UTF编码的字,java,sockets,apache-flink,Java,Sockets,Apache Flink,我试图让Flink从套接字连接读取一些流式文本输入 在我的输入套接字代码中,我使用以下命令发布文本,以便Flink接收: outputStream.writeUTF(new String(message.getPayload())); 然而,在Flink中,即使连接正常,我也无法阅读传入的文本。我在Google-d上搜索,发现我可能需要使用readUTF()阅读文本。换句话说,这主要是由于编码。但是,这些都是在InputStream上完成的;Flink没有,因为我的输入是以数据流的形式进行的:
outputStream.writeUTF(new String(message.getPayload()));
然而,在Flink中,即使连接正常,我也无法阅读传入的文本。我在Google-d上搜索,发现我可能需要使用readUTF()
阅读文本。换句话说,这主要是由于编码。但是,这些都是在InputStream
上完成的;Flink没有,因为我的输入是以数据流的形式进行的:
DataStream text=env.socketextstream(“localhost”,端口“\n”);
有人能给我提供这方面的建议吗?谢谢大家! 您的程序想要完成什么?
这些都是Flink的功能,如果您不想实现这些功能,我建议您在进行低级网络通信时使用Java
如果使用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");
}
writeUTF()
不生成“以UTF编码的字”。它生成一种特定格式,其字首长度为16位,只有readUTF()
才能理解。如果不想使用readUTF()
,也不能使用writeUTF()
。使用writeBytes()
或任何适合您阅读的代码。您好,谢谢您的回复。我正在尝试设置一个源,它是一个套接字连接。关于Java套接字,我正在使用Java.io.DataOutStream.writeUTF(字符串str)。我更新了我的答案,以显示一个代码示例-希望这对Hanks有帮助!现在我需要做的是将其应用于Flink的数据流。这是因为数据输入的形式是“DataStream text=env.sockettextream(“localhost”,port,“\n”);”。我已经把这个添加到我的问题中。再次感谢。此代码不正确。构造字符串时,它忽略read()
返回的计数。
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");
}