【问题标题】:Binary files in ScalaScala 中的二进制文件
【发布时间】:2017-12-16 03:52:00
【问题描述】:

我想在 scala 中创建一个包含如下列表的二进制文件:

271,813854,270
271,814100,267
271,814106,813858
325,813854,324
325,814100,321
325,814106,813858
643,813854,642
643,814100,639
643,814106,813858
670,813854,813855
670,814100,666
670,814106,813858

为了得到这个,我正在编写以下代码:

class Indexes (val listSPO:List[tripleInt], val listPSO:List[tripleInt], val listOSP:List[tripleInt] ){
  val sl = listSPO.sortBy(l => (l.sub, l.pre))
  val pl = listPSO.sortBy(l => (l.sub, l.pre))
  val ol = listOSP.sortBy(l => (l.sub, l.pre))

  var y1:Int=0
  var y2:Int=0
  var y3:Int=0

  val fstream:FileOutputStream = new FileOutputStream("patSPO.dat")
  var out:BufferedOutputStream = new BufferedOutputStream(fstream)
  val fstream2:FileOutputStream = new FileOutputStream("patPSO.dat")
  var out2:BufferedOutputStream = new BufferedOutputStream(fstream2)
  val fstream3:FileOutputStream = new FileOutputStream("patOSP.dat")
  var out3:BufferedOutputStream = new BufferedOutputStream(fstream3)

  for ( a <- 0 to listSPO.size-1){
    y1 = listSPO(a).sub
    y2 = listSPO(a).pre
    y3 = listSPO(a).obj
    val tpiSOP:tripleInt = new tripleInt(y1,y3,y2)
    out.write(tpiSOP)
  }}

然后每个列表都包含三个 Int 数字,我想为每个列表创建一个对应的文件。 TripleInt 对象声明为:

class tripleInt(var sub:Int, var pre:Int, var obj:Int)

我的问题是为什么我在 out.write(tpiSOP) 行中收到错误,我该如何解决?

更新:错误是 'cannot resolve with such signature' 'Type Mismatch'

【问题讨论】:

  • 请包括错误/堆栈跟踪

标签: scala file outputstream


【解决方案1】:

write() 方法不知道 tripleInt 是什么或如何处理它。您必须将tpiSop 更改为write() 方法可以理解的内容,可以是单个IntArray[Byte]

【讨论】:

  • 是否可以将 Tripleint 对象转换为 Array[Byte]?
  • 好吧,Int 是 32 位(4 个字节),因此您可以将 3 个 Ints 转换为 12 个字节并相应地填充一个 Array。另一种选择是一次只写 3 个Ints。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2012-01-24
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多