Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Flink套接字源-Flink无法读取UTF编码的字_Java_Sockets_Apache Flink - Fatal编程技术网

Java Flink套接字源-Flink无法读取UTF编码的字

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没有,因为我的输入是以数据流的形式进行的:

我试图让Flink从套接字连接读取一些流式文本输入

在我的输入套接字代码中,我使用以下命令发布文本,以便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");
}