package com.dtspark.scala.basics
import java.io.Serializable
import java.io.ByteArrayOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.io.ByteArrayInputStream
import java.io.FileOutputStream
import java.io.FileInputStream
import scala.io.Source
import scala.sys.process.ProcessBuilder.Source
import scala.sys.process.ProcessBuilder.Source
//序列化版本ID
@SerialVersionUID(1) class DTSpark(val name:String)extends Serializable
object HelloFileOpps {
def main(args: Array[String]): Unit = {
val dtspark= new DTSpark("Spark")
println(new String(serialize(dtspark)))
println(deserialize[DTSpark](serialize(dtspark)).name)
serialize_file(dtspark)
println(deserialize_file[DTSpark]("D:\\a.txt").name)
//編碼很重要,可能不識別
for(line <- Source.fromFile("D:\\a.txt","GBK").getLines())println(line)
println(Source.fromFile("D:\\a.txt","GBK").mkString)
//for(item <- Source.fromFile("D:\\a.txt","GBK"))println(item)
//從網絡上讀取
println(Source.fromURL("https://www.baidu.com/","UTF-8").mkString)
}
//序列化(將對象傳入,變成字節流)
def serialize[T](o:T):Array[Byte]={
val bos = new ByteArrayOutputStream()//內存輸出流,和磁盤輸出流從操作上講是一樣的
val oos = new ObjectOutputStream(bos)
oos.writeObject(o)
oos.close()
bos.toByteArray
}
//反序列化
def deserialize[T](bytes:Array[Byte]):T={
val bis=new ByteArrayInputStream(bytes)
val ois=new ObjectInputStream(bis)
ois.readObject.asInstanceOf[T]//進行類型轉換,因為你要返回這個類型
}
//文件輸出流
def serialize_file[T](o:T)={
val bos = new FileOutputStream("D:\\a.txt")
val oos = new ObjectOutputStream(bos)
oos.writeObject(o)
oos.close()
}
//文件輸入流
def deserialize_file[T](file:String):T={
val bis=new FileInputStream(file)
val ois=new ObjectInputStream(bis)
ois.readObject.asInstanceOf[T]//進行類型轉換,因為你要返回這個類型
}
}