Scala學習——字節流和文件流(對象的序列化)


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]//進行類型轉換,因為你要返回這個類型
  }
   
  
  
  
  
  
  
  
  
  
  
  
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM