【发布时间】:2014-05-19 16:40:11
【问题描述】:
我必须即时生成一个大文件。读取数据库并将其发送给客户端。 我阅读了一些文档并做到了这一点
val streamContent: Enumerator[Array[Byte]] = Enumerator.outputStream {
os =>
// new PrintWriter() read from database and for each record
// do some logic and write
// to outputstream
}
Ok.stream(streamContent.andThen(Enumerator.eof)).withHeaders(
CONTENT_DISPOSITION -> s"attachment; filename=someName.csv"
)
我对 scala 比较陌生,一般来说只有一周时间,所以不要为我的声誉提供指导。
我的问题是:
1) 这是最好的方法吗?我发现如果我有一个大文件,这将加载到内存中,并且在这种情况下也不知道块大小是多少,如果它会为每个 write() 发送不方便。
2) 我发现这个方法Enumerator.fromStream(data : InputStream, chunkedSize : int) 稍微好一点,因为它有一个块大小,但我没有 inputStream 因为我是动态创建文件的。
【问题讨论】:
-
块大小默认设置为
1024 * 8。我认为大小取决于您是否要发送更大或更小的块。 -
@goral 你怎么知道
Enumerator.outputStream被1024*8分块?? -
我不知道 outputStream,你说的是
fromStream方法和在设置为默认值的规范中 -
@goral 抱歉,如果我的问题不清楚,我已经知道 fromStream,我问的是 .outputStream