java - 我怎样才能将这个反序列化代码从java翻译成scala?

标签 java scala deserialization

我是 Scala/Java 菜鸟,很抱歉,如果这是一个相对简单的解决方案——但我正在尝试访问外部文件中的模型(Apache Open NLP 模型),但不确定我在哪里我错了。 Here's how you'd do it in Java ,这就是我正在尝试的:

import java.io._

val nlpModelPath = new java.io.File( "." ).getCanonicalPath + "/lib/models/en-sent.bin"
val modelIn: InputStream = new FileInputStream(nlpModelPath)

它工作正常,但试图根据该二进制文件中的模型实例化一个对象是我失败的地方:

val sentenceModel = new modelIn.SentenceModel // type SentenceModel is not a member of java.io.InputStream
val sentenceModel = new modelIn("SentenceModel") // not found: type modelIn

我也尝试过 DataInputStream:

val file = new File(nlpModelPath)
val dis = new DataInputStream(file)
val sentenceModel = dis.SentenceModel() // value SentenceModel is not a member of java.io.DataInputStream

我不确定我缺少什么——也许是某种将 Stream 转换为某种二进制对象的方法,我可以从中提取方法?感谢您的任何指点。

最佳答案

问题是你使用了错误的语法(请不要把它当作个人问题,但如果你打算坚持使用 java 或 scala,为什么不先阅读一些初学者 java 书籍甚至只是教程一些时间?)

你会用java写的代码

SentenceModel model = new SentenceModel(modelIn);

在 scala 中看起来很相似:

val model: SentenceModel = new SentenceModel(modelIn)
// or just 
val model = new SentenceModel(modelIn)

您使用此语法遇到的问题是您忘记导入 SentenceModel 的定义,因此编译器根本不知道什么是 SentenceModel。

添加

import opennlp.tools.sentdetect.SentenceModel

在你的 .scala 文件的顶部,这将修复它。

关于java - 我怎样才能将这个反序列化代码从java翻译成scala?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14015687/

相关文章:

c# - Json.net反序列化,子属性为空时作为数组出现

c# - 如何将消息反序列化为强类型对象,然后为该消息动态调用运行时分配的处理程序

java - Java 中的图像、绘图和操作框架?

java - 字符串上的正则表达式

java - 在不使用集合的情况下在java中创建动态数组

java - 如何将 play.api.libs.json.JsValue 转换为 org.json.JSONObject

scala - scala spark中的值和列操作,如何使用带有spark列的运算符左侧的值?

java - Jackson - 将 Map 实现反序列化为 HashMap

java - 如何使用 HAPI 框架工作解析 HL7 多段(ORC/OBR/OBX)?

scala - Actors 中 future 的执行上下文