Scala对象序列化/反序列化方法及查看BQ TransportOptions内部值
Scala/Java新手技术问题解答
一、Scala中对象的序列化与反序列化
Scala基于JVM,序列化机制和Java逻辑一致,核心是让目标类实现Serializable特质(对应Java的java.io.Serializable接口),再通过ObjectOutputStream和ObjectInputStream完成序列化、反序列化操作。
1. 定义可序列化类
import java.io.Serializable // 普通类需手动实现Serializable特质 class User(val id: Int, val name: String, val age: Int) extends Serializable // Scala的case class默认支持序列化,无需额外实现 case class Product(id: String, price: Double) extends Serializable
2. 序列化对象到文件
import java.io.{FileOutputStream, ObjectOutputStream} val user = new User(1, "Bob", 30) val oos = new ObjectOutputStream(new FileOutputStream("user_data.ser")) oos.writeObject(user) oos.close()
3. 从文件反序列化对象
import java.io.{FileInputStream, ObjectInputStream} val ois = new ObjectInputStream(new FileInputStream("user_data.ser")) val deserializedUser = ois.readObject().asInstanceOf[User] ois.close() println(s"反序列化结果: id=${deserializedUser.id}, name=${deserializedUser.name}, age=${deserializedUser.age}")
二、查看BigQuery TransportOptions的内部值
你当前打印的是对象默认的toString输出(类名+哈希码),要查看内部配置,有两种实用方法:
1. 调用官方Getter方法(推荐)
HttpTransportOptions类提供了专属的getter方法获取内部配置,先将TransportOptions强转为具体实现类,再调用方法即可:
val bqservice = BigQueryOptions.getDefaultInstance val transportOptions = bqservice.getTransportOptions.asInstanceOf[com.google.cloud.http.HttpTransportOptions] // 打印常用配置项 println(s"连接超时: ${transportOptions.getConnectTimeout} 毫秒") println(s"读取超时: ${transportOptions.getReadTimeout} 毫秒") println(s"HTTP传输工厂: ${transportOptions.getHttpTransportFactory}")
2. 反射遍历属性(仅调试用)
如果想一次性查看所有属性,可通过反射实现(注意:反射会破坏封装性,仅建议调试场景使用):
import java.lang.reflect.Field val fields = transportOptions.getClass.getDeclaredFields fields.foreach { field => field.setAccessible(true) println(s"${field.getName}: ${field.get(transportOptions)}") }
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

