【发布时间】:2022-01-24 12:19:22
【问题描述】:
我的 Scala 服务器通过socket.getInputStream 从套接字获取InputStream 对象(从我的套接字客户端发送的一些字节,字节的大小打印在下面)
下面的代码尝试将其读入数组
var buffer: Array[Byte] = null
def read(stream: InputStream, size: Int) = {
val start = System.nanoTime()
buffer = new Array[Byte](size)
var value: Int = 0
(0 until size).foreach(i => {
value = stream.read()
buffer(i) = value.toByte
})
val end = System.nanoTime()
println(s"Getting buffer from InputStream, size: $size, cost: ${(end - start)/1e6} ms")
buffer
}
部分输出是
Getting buffer from InputStream, size: 4, cost: 174.923596 ms
Getting buffer from InputStream, size: 2408728, cost: 919.207885 ms
但是,对于相同的数据大小,一些现有的服务器可能会更快,例如Redis 可以在 ~10ms 内发送字节,所以
是否可以提高此程序的性能?
【问题讨论】:
-
为什么不使用像 Fs2 或 AkkaStreams 这样的高级库?甚至,如果您想阅读所有内容,您可以使用标准库中的
Source。
标签: java scala inputstream bufferedreader