最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaIO字符操作和對象操作示例詳解

 更新時間:2023年02月05日 11:24:30   作者:啵啵腸  
這篇文章主要為大家介紹了JavaIO字符操作和對象操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

字符操作

編碼與解碼

編碼就是把字符轉換為字節(jié),而解碼是把字節(jié)重新組合成字符。

如果編碼和解碼過程使用不同的編碼方式那么就出現了亂碼。

  • GBK 編碼中,中文字符占 2 個字節(jié),英文字符占 1 個字節(jié);
  • UTF-8 編碼中,中文字符占 3 個字節(jié),英文字符占 1 個字節(jié);
  • UTF-16be 編碼中,中文字符和英文字符都占 2 個字節(jié)。

UTF-16be 中的 be 指的是 Big Endian,也就是大端。相應地也有 UTF-16le,le 指的是 Little Endian,也就是小端。

Java 的內存編碼使用雙字節(jié)編碼 UTF-16be,這不是指 Java 只支持這一種編碼方式,而是說 char 這種類型使用 UTF-16be 進行編碼。char 類型占 16 位,也就是兩個字節(jié),Java 使用這種雙字節(jié)編碼是為了讓一個中文或者一個英文都能使用一個 char 來存儲。

String 的編碼方式

String 可以看成一個字符序列,可以指定一個編碼方式將它編碼為字節(jié)序列,也可以指定一個編碼方式將一個字節(jié)序列解碼為 String。

String str1 = "中文";
byte[] bytes = str1.getBytes("UTF-8");
String str2 = new String(bytes, "UTF-8");
System.out.println(str2);

在調用無參數 getBytes() 方法時,默認的編碼方式不是 UTF-16be。雙字節(jié)編碼的好處是可以使用一個 char 存儲中文和英文,而將 String 轉為 bytes[] 字節(jié)數組就不再需要這個好處,因此也就不再需要雙字節(jié)編碼。getBytes() 的默認編碼方式與平臺有關,一般為 UTF-8。

byte[] bytes = str1.getBytes();

Reader 與 Writer

不管是磁盤還是網絡傳輸,最小的存儲單元都是字節(jié),而不是字符。但是在程序中操作的通常是字符形式的數據,因此需要提供對字符進行操作的方法。

  • InputStreamReader 實現從字節(jié)流解碼成字符流;
  • OutputStreamWriter 實現字符流編碼成為字節(jié)流。

實現逐行輸出文本文件的內容

public static void readFileContent(String filePath) throws IOException {
    FileReader fileReader = new FileReader(filePath);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        System.out.println(line);
    }
    // 裝飾者模式使得 BufferedReader 組合了一個 Reader 對象
    // 在調用 BufferedReader 的 close() 方法時會去調用 Reader 的 close() 方法
    // 因此只要一個 close() 調用即可
    bufferedReader.close();
}

對象操作

序列化

序列化就是將一個對象轉換成字節(jié)序列,方便存儲和傳輸。

  • 序列化:ObjectOutputStream.writeObject()
  • 反序列化:ObjectInputStream.readObject()

不會對靜態(tài)變量進行序列化,因為序列化只是保存對象的狀態(tài),靜態(tài)變量屬于類的狀態(tài)。

Serializable

序列化的類需要實現 Serializable 接口,它只是一個標準,沒有任何方法需要實現,但是如果不去實現它的話而進行序列化,會拋出異常。

public static void main(String[] args) throws IOException, ClassNotFoundException {
    A a1 = new A(123, "abc");
    String objectFile = "file/a1";
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(objectFile));
    objectOutputStream.writeObject(a1);
    objectOutputStream.close();
    ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(objectFile));
    A a2 = (A) objectInputStream.readObject();
    objectInputStream.close();
    System.out.println(a2);
}
private static class A implements Serializable {
    private int x;
    private String y;
    A(int x, String y) {
        this.x = x;
        this.y = y;
    }
    @Override
    public String toString() {
        return "x = " + x + "  " + "y = " + y;
    }
}

transient

transient 關鍵字可以使一些屬性不會被序列化。

ArrayList 中存儲數據的數組 elementData 是用 transient 修飾的,因為這個數組是動態(tài)擴展的,并不是所有的空間都被使用,因此就不需要所有的內容都被序列化。通過重寫序列化和反序列化方法,使得可以只序列化數組中有內容的那部分數據。

private transient Object[] elementData;

以上就是JavaIO字符操作和對象操作示例詳解的詳細內容,更多關于JavaIO字符操作對象操作的資料請關注腳本之家其它相關文章!

相關文章

  • Java流式操作之Collectors工具類操作指南

    Java流式操作之Collectors工具類操作指南

    Collectors是Collector的工具類,類中提供了很多流收集、歸約、分組、分區(qū)等方法,方便我們直接使用,下面這篇文章主要給大家介紹了關于Java流式操作之Collectors工具類操作的相關資料,需要的朋友可以參考下
    2023-05-05
  • Maven 安裝目錄的詳細介紹

    Maven 安裝目錄的詳細介紹

    這篇文章主要介紹了Maven 安裝目錄的詳細介紹的相關資料,這里對Maven進行了解讀,希望通過本文可以幫助到大家,需要的朋友可以參考下
    2017-08-08
  • Java讀取PDF中的表格的方法示例

    Java讀取PDF中的表格的方法示例

    本文主要介紹了Java讀取PDF中的表格的方法示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • spring單元測試之@RunWith的使用詳解

    spring單元測試之@RunWith的使用詳解

    這篇文章主要介紹了spring單元測試之@RunWith的使用詳解,@RunWith 就是一個運行器,@RunWith(JUnit4.class) 就是指用JUnit4來運行,
    @RunWith(SpringJUnit4ClassRunner.class),讓測試運行于Spring測試環(huán)境,需要的朋友可以參考下
    2023-12-12
  • 使用ScheduledThreadPoolExecutor踩過最痛的坑

    使用ScheduledThreadPoolExecutor踩過最痛的坑

    這篇文章主要介紹了使用ScheduledThreadPoolExecutor踩過最痛的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Spring時間戳(日期)格式轉換方式

    Spring時間戳(日期)格式轉換方式

    這篇文章主要介紹了Spring時間戳(日期)格式轉換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • try catch finally的執(zhí)行順序深入分析

    try catch finally的執(zhí)行順序深入分析

    首先執(zhí)行try,如果有異常執(zhí)行catch,無論如何都會執(zhí)行finally,當有return以后,函數就會把這個數據存儲在某個位置,然后告訴主函數,我不執(zhí)行了,接下來你執(zhí)行吧,所以函數就會推出
    2013-09-09
  • Java超詳細分析泛型與通配符

    Java超詳細分析泛型與通配符

    本篇文章帶大家認識Java語法泛型與通配符,泛型和通配符是一個非常抽象的概念,簡單來說,兩者都可以將類型作為“參數”進行傳遞,不過泛型是在你知道傳入什么類型的時候使用的,而通配符是你不確定傳入什么類型的時候使用,本文將介紹泛型與通配符的使用及兩者間的區(qū)別
    2022-03-03
  • Java 面向對象之繼承篇詳解原理與特點

    Java 面向對象之繼承篇詳解原理與特點

    繼承是java面向對象編程技術的一塊基石,因為它允許創(chuàng)建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為
    2021-10-10
  • 深入了解Java排序算法

    深入了解Java排序算法

    本文主要介紹了深入了解Java排序算法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2007-03-03

最新評論

龙井市| 古浪县| 洛扎县| 和龙市| 天柱县| 天柱县| 崇明县| 军事| 祁连县| 遂溪县| 扶余县| 盐亭县| 高平市| 沁阳市| 米脂县| 常州市| 富平县| 板桥市| 巴彦县| 商丘市| 丰城市| 荣昌县| 定安县| 始兴县| 南漳县| 七台河市| 澄城县| 腾冲县| 沂源县| 团风县| 莆田市| 通州市| 阿尔山市| 岫岩| 定陶县| 徐水县| 深州市| 镇雄县| 达拉特旗| 通江县| 留坝县|