久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Java中的IO流基礎(chǔ)知識

 海擁 2021-11-30

1. Java 中有幾種類型的流

  • 按照流的方向:輸入流(inputStream) 和輸出流(outputStream)
  • 按照實現(xiàn)功能分:節(jié)點流(可以從或向一個特定的地方(節(jié)點)
    讀寫數(shù)據(jù)。如FileReader)和處理流(是對一個已存在的流的連接和封裝,通過所封裝的流的功能調(diào)用實現(xiàn)數(shù)據(jù)讀寫,如BufferedReader處理流的構(gòu)造方法總是要帶一個其他的流對象做參數(shù),。一個流對象經(jīng)過其他流的多次包裝,稱為流的鏈接,。)
  • 按照處理數(shù)據(jù)的單位:字節(jié)流和字符流,。字節(jié)流繼承于InputStream 和OutputStream,字符流繼承于InputStreamReader和OutputStreamWriter,。
    在這里插入圖片描述
    在這里插入圖片描述

2.字節(jié)流如何轉(zhuǎn)為字符流

  • 字節(jié)輸入流轉(zhuǎn)字符輸入流通過InputStreamReader實現(xiàn),該類的構(gòu)造函數(shù)可以傳入InputStream對象,。

  • 字節(jié)輸出流轉(zhuǎn)字符輸出流通過OutputStreamWriter實現(xiàn),該類的構(gòu)造函數(shù)可以傳入OutputStream對象。

3.如何將一 個java對象序列化到文件里
在java中能夠被序列化的類必須先實現(xiàn)Serializable接口,該接口沒有任何抽象方法只是起到一個標(biāo)記作用,。

//對象輸出流
ObjectOutputStream objectOutputStream =
new ObjectOutputStream (new FileOutputStream(new File ("D://obj")));
objectOutputStream.writeObject (new User (" zhangsan", 100) );
objectOutputStream.close();
//對象輸入流
ObjectInputStream objectInputStream =
new ObjectInputStream(new FileInputStream(new File ("D://obj")));
User user = (User) objectInputstream.readObject();
System.out.println(user);
objectInputStream.close();

4.字節(jié)流和字符流的區(qū)別

  • 字節(jié)流讀取的時候,讀到一個字節(jié)就返回一個字節(jié);字符流使用了字節(jié)流讀到一個或多個字節(jié)(中文對應(yīng)的字節(jié)數(shù)是兩個,在UTF-8碼表中是3個字節(jié))時,。先去查指定的編碼表,將查到的字符返回,。字節(jié)流可以處理所有類型數(shù)據(jù),如:圖片, MP3 ,AVI視頻文件,而字符流只能處理字符數(shù)據(jù),。只要是處理純文本數(shù)據(jù),就要優(yōu)先考慮使用字符流,除此之外都用字節(jié)流。字節(jié)流主要是操作byte類型數(shù)據(jù),以byte數(shù)組為準(zhǔn),要操作類就是OutputStream. InputStream
  • 字符流處理的單元為2個字節(jié)的Unicode字符,分別操作字符、字符數(shù)組或字符串,而字節(jié)流處理單元為1個字節(jié),操作字節(jié)和字節(jié)數(shù)組,。所以字符流是由Java虛擬機(jī)將字節(jié)轉(zhuǎn)化為2個字節(jié)的Unicode字符為單位的字符而成的,所以它對多國語言支持性比較好!如果是音頻文件、圖片,、歌曲,就用字節(jié)流好點,如果是關(guān)系到中文(文本)的,用字符流好點。在程序中一個字符等于兩個字節(jié),java提供了Reader. Writer 兩個專門操作字符流的類,。

5.什么是 java序列化,如何實現(xiàn)java序列化?
簡要解釋:
  序列化就是一種用來處理對象流的機(jī)制,所謂對象流也就是將對象的內(nèi)容進(jìn)行流化??梢詫α骰蟮膶ο筮M(jìn)行讀寫操作,也可將流化后的對象傳輸于網(wǎng)絡(luò)之間。
  序列化是為了解決在對對象流進(jìn)行讀寫操作時所引發(fā)的問題,。序列化的實現(xiàn):將需要被序列化的類實現(xiàn)Serializable接口,該接口沒有需要實現(xiàn)的方法,implements Serializable只是為了標(biāo)注該對象是可被序列化的,然后使用一個輸出流(如:FileOutputStream)來構(gòu)造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數(shù)為obj的對象寫出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流,。
詳細(xì)解釋:
  當(dāng)兩個進(jìn)程在進(jìn)行遠(yuǎn)程通信時,彼此可以發(fā)送各種類型的數(shù)據(jù)。無論是何種類型的數(shù)據(jù),都會以二進(jìn)制序列的形式在網(wǎng)絡(luò)上傳送,。發(fā)送方需要把這個Java對象轉(zhuǎn)換為字節(jié)序列,才能在網(wǎng)絡(luò)上傳送;接收方則需要把字節(jié)序列再恢復(fù)為Java對象。
  只能將支持 java.io.Serializable 接口的對象寫入流中,。每個 serializable 對象的類都被編碼,編碼內(nèi)容包括類名和類簽名、對象的字段值和數(shù)組值,以及從初始對象中引用的其他所有對象的閉包,。

  • 概念

序列化:把Java對象轉(zhuǎn)換為字節(jié)序列的過程。
反序列化:把字節(jié)序列恢復(fù)為Java對象的過程,。

  • 用途

對象的序列化主要有兩種用途:
  1) 把對象的字節(jié)序列永久地保存到硬盤上,通常存放在一個文件中;
  2) 在網(wǎng)絡(luò)上傳送對象的字節(jié)序列。

  • 序列化API

java.io.ObjectOutputStream代表對象輸出流,它的
writeObject(Object obj)方法可對參數(shù)指定的obj對象進(jìn)行序列化,把得到的字節(jié)序列寫到一個目標(biāo)輸出流中,。只有實現(xiàn)了Serializable和Externalizable接口的類的對象才能被序列化。
  java.io.ObjectInputStream代表對象輸入流,它的readObject()方法從一個源輸入流中讀取字節(jié)序列,再把它們反序列化為一個對象,并將其返回,。

代碼示例

import java.io.*;
import java.util.Date;

public class ObjectSaver {
    public static void main(String[] args) throws Exception {
        /*其中的  D:\\objectFile.obj 表示存放序列化對象的文件*/


        //序列化對象
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:\\objectFile.obj"));
        Customer customer = new Customer("王麻子", 24);
        out.writeObject("你好!");    //寫入字面值常量
        out.writeObject(new Date());    //寫入匿名Date對象
        out.writeObject(customer);    //寫入customer對象
        out.close();


        //反序列化對象
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\objectFile.obj"));
        System.out.println("obj1 " + (String) in.readObject());    //讀取字面值常量
        System.out.println("obj2 " + (Date) in.readObject());    //讀取匿名Date對象
        Customer obj3 = (Customer) in.readObject();    //讀取customer對象
        System.out.println("obj3 " + obj3);
        in.close();
    }
}

class Customer implements Serializable {
    private String name;
    private int age;
    public Customer(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String toString() {
        return "name=" + name + ", age=" + age;
    }
}

執(zhí)行結(jié)果
在這里插入圖片描述

  • 說明:
      讀取對象的順序與寫入時的順序要一致。
      對象的默認(rèn)序列化機(jī)制寫入的內(nèi)容是:對象的類,類簽名,以及非瞬態(tài)和非靜態(tài)字段的值,。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多