【发布时间】:2015-05-15 09:57:51
【问题描述】:
我将数据对象表示为Iterator[Byte],它是从InputStream 实例创建的。
问题在于Byte 是一个从-128 到127 的有符号整数,而InputStream 中的read 方法返回一个从0 到255 的无符号整数。这特别有问题,因为从语义-1应该表示输入流的结束。
缓解这两种类型之间不兼容的最佳方法是什么?有没有一种优雅的方式在一个到另一个之间转换?或者我应该只使用Int 而不是Bytes,即使感觉不那么优雅?
def toByteIterator(in: InputStream): Iterator[Byte] = {
Iterator.continually(in.read).takeWhile(-1 !=).map { elem =>
convert // need to convert unsigned int to Byte here
}
}
def toInputStream(_it: Iterator[Byte]): InputStream = {
new InputStream {
val (it, _) = _it.duplicate
override def read(): Int = {
if (it.hasNext) it.next() // need to convert Byte to unsigned int
else -1
}
}
}
【问题讨论】:
-
字节 b=(byte)intValue-128;
-
这似乎很不直观,尤其是。对于那些不熟悉的人来说,甚至存在这样的问题。如果可能的话,我想避免这种情况,因为由于我正在处理的数据的性质和规模,一旦数据被损坏,就很难非常恢复数据
标签: scala byte inputstream type-conversion