給定一個 Iterator[Byte],我可以在不將整個 Iterator 物化到記憶體中的情況下生成 InputStream 嗎?
uj5u.com熱心網友回復:
如果您使用的是 Scala,則有一個單行解決方案:
scala> import java.io.InputStream
scala> val itr = Iterator.range(0, 10).map(_.toByte)
val itr: Iterator[Byte] = <iterator>
scala> val ins: InputStream = () => if(itr.hasNext) itr.next & 255 else -1 // Here it is, or
// val ins: InputStream = () => itr.nextOption.fold(-1)(_ & 255)
val ins: java.io.InputStream = anon$1@5dc218e2
scala> ins.readAllBytes()
val res0: Array[Byte] = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
uj5u.com熱心網友回復:
這不是太困難。只是構建InputStream和實施其read()方法
中的條款Iterator。在 Java 中,它可能如下所示:
public InputStream streamFromIterator(Iterator<Byte> iterator) {
return new InputStream() {
@Override
public int read() {
if (iterator.hasNext())
return Byte.toUnsignedInt(iterator.next());
else
return -1; // end of stream
}
};
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/351388.html
標籤:斯卡拉
上一篇:避免違反開閉原則的設計模式
下一篇:如何在CSS中為<a>添加屬性
