我想知道这是否合理。假设我有一个(Spring)servlet,它为MySQL中存储为blob的大型文件提供服务。不管这是否理想,情况就是这样。
比方说我满足了很多这样的要求。我想尽可能地限制我的java应用程序使用的内存。
从理论上讲,我应该能够在从mysql连接读取数据时直接将数据写入servlet响应,而无需将大的byte[]
加载到应用程序进程的内存中。
如果这很重要的话,我使用的是SpringJDBC和Springmvc。
感谢
当然,这就是ResultSet.getBinaryStream()
和ResultSet.getCharacterStream()
存在的原因。
然后,只需要将InputStream
的内容复制到您的OutputStream
(可能是从控制器中的HttpServletResponse
检索到的ServletOutputStream
)。
所使用的内存量和传输数据的实际方法由驾驶员决定。像MySQL这样的幼稚驱动程序只会将整个数据读取到ByteArrayInputStream
中,而PostgreSQL则会根据需要使用其LargeObjectAPI
将数据从服务器中分离出来,从而提高内存使用效率。