You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:20:19