我的Java程序调用一个python脚本,该脚本向其发送小的JSON字符串。我使用流程生成器启动python脚本,然后将inputstream
包装在inputstreamreader
和BufferedReader
中。
我注意到的是,该程序一直等到发送了一定数量的消息后才将数据传输到我的Java应用程序。
我将此问题追溯到我从流程中获得的原始InputStream,因为即使我不使用BufferedReader单独使用它,我仍然会遇到此问题。当我增加消息的大小时,它们的传输没有任何问题。但是我只需要每隔几秒钟发送一次短消息。此行为使我认为inputstream具有一些内部缓冲区,在传输数据之前它会等待填充。 有什么帮助吗?
答案 0 :(得分:0)
您还没有提供足够的详细信息来确切了解正在发生的事情(MCVE会很好;)),但是:
因此我对“ flush()”的建议。
问:如果您“刷新”缓冲区-谁需要这样做?读者还是作家?A:当然是 WRITER :)
听起来您的“作家”是Python。听起来也好像Python应用正在写到stdout。
这可能会有所帮助:
How often does python flush to a file?
对于文件操作,Python使用操作系统的默认值 缓冲,除非您对其进行配置,否则进行配置。您可以指定一个 缓冲区大小,无缓冲或行缓冲。
例如,open函数使用缓冲区大小参数。
http://docs.python.org/library/functions.html#open
“可选的缓冲参数指定文件的所需缓冲 大小:“
0 means unbuffered, 1 means line buffered, any other positive value means use a buffer of (approximately) that size. A negative buffering means to use the system default, which is usually line buffered for tty devices and fully buffered for other files. If omitted, the system default is used.