为什么通过网络连接使用 InputStream 而不是 ByteArray?
Why InputStream is used over network connection, but not ByteArray?
我有以下问题。
我明白为什么在处理文件或某些外部源时要使用 InputStream。
但是当我们处理网络连接时使用流有什么意义呢?
假设一个带附件的 POST 请求被发送到某个应用程序服务器(Tomcat 或其他),附件被发送,所以 JVM 已经将它保存在内存中。
那么使用 InputStream 而不是 ByteArray 有什么意义呢?
数据已经在内存中,所以JVM将InputStream转为ByteArray应该不会有任何影响。
因为我认为当 InputStream 用于文件等外部源时是合理的,但当从内存中读取数据时则不合理。
更新:
我说的是通过多部分形式发送附件,附件在许多包中发送,但即使我不读取输入流,所有包都已发送。
InputStream
被使用是因为网络流量以数据包(或其他数据位)的形式出现,它从一开始就不是完全可用的——它肯定不完全在内存中(想象一个 youtube 视频是流)。所以它是一个流,并且像 java.
中那样对待它
你说错了
Data is in memory already, so to JVM converting InputStream to ByteArray should not take any effect.
并不是所有的数据都一定是"in memory already",它是以字节流的形式进入内存的。您可以在字节到达时对其进行处理(而不是将它们保存在内存中,可能的缓冲区除外)。
写的时候也一样。您将字节通过流推向接收器(例如,浏览器)。您可能再次使用缓冲区以块的形式这样做。只有缓冲区的内容在内存中。每次刷新时,这些字节都通过流发送,缓冲区再次 "empty",准备好为下一个字节块填充。
它真的是关于管道和水(因此行话 stream、flush、sink)
p.s。您可能还想研究反应流,其中数据处理 inflow/outflow 由整个管道系统处理(因此您永远不会使系统中的某个部分过载)。
好吧,如果我 运行 在我的机器上有一个 Tomcat,而你从你的机器上向它发出请求,即使数据在我机器的内存中,我也无法想象有什么办法而不是通过网络将数据从一台机器传递到另一台机器的流。你可以向我的 Tomcat 发送请求,但是你不能直接访问我机器上的内存。
即使两个程序 运行 在同一台机器上,它们也可能 运行 在不同的 JVM 上,而且一个 JVM 不能直接从另一个 JVM 访问内存。
我有以下问题。
我明白为什么在处理文件或某些外部源时要使用 InputStream。 但是当我们处理网络连接时使用流有什么意义呢?
假设一个带附件的 POST 请求被发送到某个应用程序服务器(Tomcat 或其他),附件被发送,所以 JVM 已经将它保存在内存中。
那么使用 InputStream 而不是 ByteArray 有什么意义呢?
数据已经在内存中,所以JVM将InputStream转为ByteArray应该不会有任何影响。
因为我认为当 InputStream 用于文件等外部源时是合理的,但当从内存中读取数据时则不合理。
更新:
我说的是通过多部分形式发送附件,附件在许多包中发送,但即使我不读取输入流,所有包都已发送。
InputStream
被使用是因为网络流量以数据包(或其他数据位)的形式出现,它从一开始就不是完全可用的——它肯定不完全在内存中(想象一个 youtube 视频是流)。所以它是一个流,并且像 java.
你说错了
Data is in memory already, so to JVM converting InputStream to ByteArray should not take any effect.
并不是所有的数据都一定是"in memory already",它是以字节流的形式进入内存的。您可以在字节到达时对其进行处理(而不是将它们保存在内存中,可能的缓冲区除外)。
写的时候也一样。您将字节通过流推向接收器(例如,浏览器)。您可能再次使用缓冲区以块的形式这样做。只有缓冲区的内容在内存中。每次刷新时,这些字节都通过流发送,缓冲区再次 "empty",准备好为下一个字节块填充。
它真的是关于管道和水(因此行话 stream、flush、sink)
p.s。您可能还想研究反应流,其中数据处理 inflow/outflow 由整个管道系统处理(因此您永远不会使系统中的某个部分过载)。
好吧,如果我 运行 在我的机器上有一个 Tomcat,而你从你的机器上向它发出请求,即使数据在我机器的内存中,我也无法想象有什么办法而不是通过网络将数据从一台机器传递到另一台机器的流。你可以向我的 Tomcat 发送请求,但是你不能直接访问我机器上的内存。
即使两个程序 运行 在同一台机器上,它们也可能 运行 在不同的 JVM 上,而且一个 JVM 不能直接从另一个 JVM 访问内存。