在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    474

    瀏覽量

    39668
  • 數據
    +關注

    關注

    8

    文章

    7224

    瀏覽量

    90194
  • 內存
    +關注

    關注

    8

    文章

    3081

    瀏覽量

    74605
  • JAVA
    +關注

    關注

    19

    文章

    2980

    瀏覽量

    105724
  • 磁盤
    +關注

    關注

    1

    文章

    383

    瀏覽量

    25375
收藏 人收藏

    評論

    相關推薦

    IO與NIO有何區別

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

    javaIO與Guava工具

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

    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 ?1950次閱讀

    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 ?2119次閱讀

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

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

    JAVANIO通過MappedByteBuffer操作大文件

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

    java的字符分析

    上次聊到了 java 的 字符 Reader ,今天來看看它的好朋友 Writer 字符。 Writer java
    的頭像 發表于 10-10 15:38 ?631次閱讀
    主站蜘蛛池模板: 456亚洲人成影院在线观 | 很很鲁在线视频播放影院 | 伊人久久大香线蕉综合7 | 午夜影视剧场 | 曰韩欧美| 久久精品人人做人人看 | 国产产一区二区三区久久毛片国语 | 天天摸天天 | 午夜免费理论片在线看 | 精品欧美小视频在线观看 | 四虎影视免费观看 | 日韩亚射吧 | 狠狠色噜噜狠狠狠狠五月婷 | 一级特一级特色生活片 | 日本在线观看一区 | 黄色三级视频 | 奇米影视婷婷 | 国产精品久久久福利 | 黄色短视频免费观看 | 91亚洲国产成人久久精品网站 | 欧美一级片观看 | 深夜久久| 久久99久久99精品免观看 | 九色国产在线 | 观看在线人视频 | 久久99热精品免费观看无卡顿 | 亚洲影院手机版777点击进入影院 | 欧美在线成人午夜影视 | 国产白白白在线永久播放 | 久久国产精品永久免费网站 | 免费色视频网站 | 日本免费www| 免费日韩一级片 | 丁香五六月婷婷 | 男人j桶女人j免费视频 | 一色屋精品免费视频 视频 一色屋免费视频 | 亚洲国产精品综合久久久 | 在线精品一区二区三区 | 欧美成人观看免费全部完小说 | 黄视频网站在线看 | 亚洲国产欧美视频 |