java - 如何使用一个流并将结果保存到多个地方?

标签 java stream database

我使用 servlet 和 Apache ServletFileUpload 提供上传图像的流。我想做的就是将该图像存储到数据库,并将调整大小(我使用 JAI)版本存储到数据库。

如何在不将图像保存到驱动器的情况下实现此目的。据我了解,流只能读取一次。那么我需要将整个图像存储在内存中吗?性能成本高吗?或者还有其他方法吗?

最佳答案

As I understand stream can be read only once.

是的

So I need to store whole image in memory?

可能,但不一定。看setBinaryStream方法PreparedStatement 。在某些情况下,您可能只需将输入流传递给该方法即可。查看其他一些流方法,您的 JDBC 驱动程序可能只支持其中的一个子集。

通过一些巧妙的缓冲,您可能可以在一次调用中提供原始流和调整大小的图像。

Is it expensive for performance?

你在谈论什么性能。如果内存有限,这当然很重要。否则内存 I/O 是最不可能成为瓶颈的地方。

如果您有足够的内存,我建议您采用这种方法,因为实现最直接,而且内存也便宜。

Or there are another way?

正如我之前所说,您可以创建一种巧妙的缓冲技术,但这需要大量的测试(和设计)。如果内存有限,您可能必须恢复到这种方法,否则,只需读入整个流,处理它并将结果写入数据库。

关于java - 如何使用一个流并将结果保存到多个地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2805548/

相关文章:

java - 是否可以在 JavaFX 的 WebView 中确定元素位置?

java - Tomcat 7 和 Apache2 连接器无法正常工作

java - 我如何在同一类中使用处理和 Swing ?

haskell - Haskell 中的流数据类型实现

php - 内容管理系统 : How to handle internal URLs best?

sql - 检索 SQL 中的最近事件

database - 德尔福数据库 : Setting up an array of ADT fields at runtime

java - junit 中的 @Transactional 注解 - spring 和 jms

c# - 通过管道将流传输到 Debug.Write()

ios - OpenTok iOS API :Stream in iPad more then two