色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Java中基礎的 IO 流

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-10 16:16 ? 次閱讀

java 中,程序通常會和其他外部設備進行數據交互,比如寫入磁盤,網絡發送數據等等,今天我們來學學 java 中 基礎的 IO 流。

IO 流

與其他外部設備進行數據交互,比如將數據從內存中保存到磁盤文件中或者從網絡上下載數據并加載到內存中,這個過程都是一種單向且有順序的數據傳輸,被稱之為流。

IO 就是 Input 輸入和 Output 輸出。輸入輸出以內存為中心的流向劃分的。傳輸數據到內存就是輸入流,從內存中輸出數據就是輸出流。

InputStream

InputStream 是所有輸入流的父類,是一個抽象類,讀取的數據單位是字節(byte)。

圖片

主要的抽象方法是 read(),這個方法就是讀取數據內容并返回 -1~255 的 int 值。read() 方法是一個阻塞的方法,只有將內容全部讀取完成之后才能運行下一行代碼。

public abstract int read() throws IOException;

以 FileInputStream 實現類作為示例:

public static void main(String[] args) throws Exception {
    // input.txt 內容為 hello, inputStream
    InputStream input = new FileInputStream("input.txt");
    int n = 0;
    while((n = input.read()) != -1){
        System.out.print((char) n);
    }
    input.close();
}

示例中的 read() 方法只能一個字節的一個字節讀取數據,效率不高,當文件中存在多個字節為一個漢字的中文時,上面的示例將打印出亂碼。

InputStream 支持將一次性讀取多個字節到緩沖區,利用緩沖區提高效率。返回值的數據不再是讀取的數據字節,而是讀取的字節數。并且可以正常的打印出中文字符。

// 將讀取的內容填充到 byte 數組
public int read(byte b[]) throws IOException
// 將讀取的內容填充 byte 數組中 off 開始,len 長度的區域
public int read(byte b[], int off, int len)  throws IOException

將緩沖區大小設置為 1024 個字節示例:

public static void main(String[] args) throws Exception {
    //input.txt 文件內容為 你好, inputStream
    InputStream input = new FileInputStream("input.txt");

    byte[] result = new byte[1024];

    while(input.read(result) != -1){
        System.out.print(new String(result, "utf-8"));
    }
    input.close();
}

OutputStream

OutputStream 是所有輸出流的父類。和 InputStream 一樣是一個抽象類。

圖片

主要的抽象方法是 write(),也是一個阻塞的方法,只有將內容全部寫完成之后才能運行下一行代碼。write() 方法和 read() 方法一樣都是一個字節一個字節的操作的。

public abstract void write(int b) throws IOException;

以 FileInputStream 實現類作為示例:

public static void main(String[] args) throws Exception {
    OutputStream out = new FileOutputStream("out.txt");
    try {
        out.write("h".getBytes());
        out.write("e".getBytes());
        out.write("l".getBytes());
        out.write("l".getBytes());
        out.write("0".getBytes());
    } finally {
        if(out != null) {
            out.close();
        }
    }
}

write() 按單個字節寫入磁盤的效率比較低下,OutputStream 提供了 write(byte[]) 一次性大批量的將字節輸出到磁盤。對于 IO 設備來說,一次性寫入 1 個字節和寫入 1000 個字節的時間都是差不多的。

public static void main(String[] args) throws Exception {
    OutputStream out = new FileOutputStream("out.txt");
    try {
        out.write("哈嘍,outputStream".getBytes());
    } finally {
        if(out != null) {
            out.close();
        }
    }
}

關閉資源

不管是 InputStream 還是 OutputStream 在使用資源之后都需要調用 close()方法。在示例中如果在 close() 方法調用之前拋出異常則不會自動關閉資源。以下兩種方式都可以關閉資源:

  1. try..finally 方式
public static void main(String[] args) throws Exception {
    InputStream input = new FileInputStream("input.txt");
    try {
        byte[] result = new byte[1024];

        while(input.read(result) != -1){
            System.out.print(new String(result, "utf-8"));
        }
    } finally {
        if(input != null) {
            input.close();
        }
    }

}
  1. try(resource)

實現了 Closeable 接口的 InputStream 和 OutputStream 使用 try(resource) 時,編譯器會自動增加 finally。

public static void main(String[] args) throws Exception {
    try (OutputStream out = new FileOutputStream("out.txt")){
        out.write("編譯器會添加 finally".getBytes());
    }

}

總結

今天就是簡單地給大家介紹 Java 的 IO 流,為接下來學其他 IO 類打個基礎。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • IO
    IO
    +關注

    關注

    0

    文章

    448

    瀏覽量

    39203
  • 數據
    +關注

    關注

    8

    文章

    7080

    瀏覽量

    89175
  • 內存
    +關注

    關注

    8

    文章

    3034

    瀏覽量

    74137
  • JAVA
    +關注

    關注

    19

    文章

    2971

    瀏覽量

    104854
  • 磁盤
    +關注

    關注

    1

    文章

    379

    瀏覽量

    25224
收藏 人收藏

    評論

    相關推薦

    IO與NIO有何區別

    NIO 提到IO,這是Java提供的一套類庫,用于支持應用程序與內存、文件、網絡間進行數據交互,實現數據寫入與輸出。JDK自從1.4版本后,提供了另一套類庫NIO,我們平時習慣稱呼為NEW IO
    的頭像 發表于 09-25 11:00 ?889次閱讀
    <b class='flag-5'>IO</b>與NIO有何區別

    javaIO與Guava工具

    Guava IO 日常系統交互,文件的上傳下載都是常見的,一般我們會通過jdk提供的IO操作庫幫助我們實現。IO指的是數據相對當前操作程序的入與出,將數據通過 輸出
    的頭像 發表于 09-25 16:24 ?739次閱讀

    Java的輸入輸出盤點

    Java分為兩種,一種是字節流,另一種是字符,分別由四個抽象類來表示(每種包括輸入和輸出兩種所以一共四個):InputStream
    發表于 07-11 07:56

    Java NIO編程理論基礎之Java IO及linux網絡IO模型發展

    Java NIO編程理論基礎篇——Java IO的發展以及linux網絡IO模型
    發表于 07-18 12:40

    javaIO演進之路概述

    第一章 javaIO演進之路
    發表于 07-24 16:53

    淺析javaIO模型

    java IO初識與Linux網絡IO模型簡介
    發表于 08-05 06:28

    javaIO和單片機的IO口整體對比

    作為從本科學單片機出身筆者,對IO口獨有情鐘,這里對javaIO和單片機的IO口整體對比一
    發表于 01-18 08:28

    基于數據Java字節碼分析

    本文基于數據框架理論,提出了如何將數據分析方法應用于JAVA 字節碼,通過建立數據與半格、數據
    發表于 12-25 13:22 ?9次下載

    java與文件實驗

    實驗10 與文件一、實驗目的 1. 理解數據的概念2. 理解Java的層次結構3. 理解文件的概念二、實驗要求 1. 掌握字節流
    發表于 09-23 19:04 ?1921次閱讀

    javaio分析

    一、的概念 (stream)的概念源于UNIX管道(pipe)的概念。在UNIX,管道是一條不間斷的字節流,用來實現程序或進程間的通信,或讀寫外圍設備、外部文件等。 一個
    發表于 09-27 14:51 ?0次下載
    <b class='flag-5'>java</b><b class='flag-5'>中</b>的<b class='flag-5'>io</b><b class='flag-5'>流</b>分析

    關于javaio知識總結詳解

    一、Java io的開始:文件 1. 我們主要講的是的本質也是對文件的處理,我們循序漸進一步一步從文件將到流去。 2. java 處理
    發表于 09-28 13:20 ?0次下載

    基礎:Java IO學習總結

    IO的分類 根據處理數據類型的不同分為:字符和字節流 根據數據流向不同分為:輸入流和輸出
    發表于 03-08 14:38 ?2078次閱讀

    Java并行存在的問題及解決辦法詳解

    對于從事Java開發的童鞋來說,相信對于Java8的并行并不陌生,沒錯,我們常常用它來執行并行任務,但是由于并行(parallel stream)采用的是享線程池,可能會對我們的性
    發表于 04-03 15:55 ?12次下載

    JAVANIO通過MappedByteBuffer操作大文件

    java io操作通常采用BufferedReader,BufferedInputStream等帶緩沖的IO類處理大文件,不過java n
    的頭像 發表于 05-05 23:42 ?3512次閱讀

    java的字符分析

    上次聊到了 java 的 字符 Reader ,今天來看看它的好朋友 Writer 字符。 Writer java
    的頭像 發表于 10-10 15:38 ?575次閱讀
    主站蜘蛛池模板: 解开白丝老师的短裙猛烈进入| 97精品视频| 久草在线福利视频在线播放| 99久久精品费精品国产一区二| 无人区日本电影在线观看| 久久婷婷五月综合色丁香花| vagaa哇嘎黄短片| 99热成人精品国产免男男| 日本超A大片在线观看| 久久国产乱子伦精品免费不卡| 邓奴的视频IVK| 影音先锋xfplay影院av| 三级黄毛片| 男污女XO猛烈的动态图| 黑人干亚洲人| 国产最新精品亚洲2021不卡| 岛国大片在线播放高清| 99国产精品久久| 37大但人文艺术A级都市天气| 中文在线观看免费网站| 亚洲中文字幕乱倫在线| 一二三四在线播放免费观看中文版视频 | 桃隐社区最新最快地址| 欧美精品九九99久久在观看| 好男人在线观看免费视频WWW| 寂寞骚妇女被后入式抽插| 国产精品久久久久AV麻豆| 99国产精品| 国产成人精品永久免费视频| gogogo视频在线观看| 国产精品高清视频在线| 吃奶啃奶玩乳漫画| 国产精品点击进入在线影院高清| 国产女高清在线看免费观看| 国产成人高清亚洲一区app| 国产精品一区二区在线播放| 国产亚洲精品AV麻豆狂野| 黑人猛挺进小莹的体内视频| 久久黄色免费网站| 青娱乐国产精品视频| 亚洲 无码 在线 专区|