日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 输入输出流

發(fā)布時間:2023/12/31 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 输入输出流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java I/O流

在java中所有數據都是使用流讀寫的。流是一組有序的數據序列,將數據從一個地方帶到另一個地方。根據數據流向的不同,可以分為輸入(Input)流和輸出(Output)流兩種

為什么要使用輸入輸出流

例如,我們平時用的 Office 軟件,對于 Word、Excel 和 PPT 文件,我們需要打開文件并讀取這些文本,和編輯輸入一些文本,這都需要利用輸入和輸出的功能。在現實生活中,輸入和輸出的例子比比皆是。

什么是I/O流

I/O流概念:輸入就是將數據從各種輸入設備(包括文件、鍵盤等)中讀取到內存中,輸出則正好相反,是將數據寫入到各種輸出設備(比如文件、顯示器、磁盤等)。例如鍵盤就是一個標準的輸入設備,而顯示器就是一個標準的輸出設備,但是文件既可以作為輸入設備,又可以作為輸出設備。

數據流是java進行I/O操作的對象,

數據流按照不同標準的分類:

  • 按照流的方向主要分為輸入流和輸出流兩大類。

  • 數據流按照數據單位的不同分為字節(jié)流和字符流。

  • 按照功能可以劃分為節(jié)點流和處理流。

數據流的處理只能按照數據序列的順序來進行,即前一個數據處理完之后才能處理后一個數據。數據流以輸入流的形式被程序獲取,再以輸出流的形式將數據輸出到其它設備

輸入流模式:

?

輸出流模式:

?

輸入流

?

Java 流相關的類都封裝在 java.io 包中,而且每個數據流都是一個對象。所有輸入流類都是 InputStream 抽象類(字節(jié)輸入流)和 Reader 抽象類(字符輸入流)的子類。其中 InputStream 類是字節(jié)輸入流的抽象類,是所有字節(jié)輸入流的父類,其層次結構如下圖所示

?

InputStream 類中所有方法遇到錯誤時都會引發(fā) IOException 異常。所以使用時要拋出異常;

InputStream類常用方法

名稱作用
int read()從輸入流讀入一個 8 字節(jié)的數據,將它轉換成一個 0~ 255 的整數,返回一個整數,如果遇到輸入流的結尾返回 -1
int read(byte[] b)從輸入流讀取若干字節(jié)的數據保存到參數 b 指定的字節(jié)數組中,返回的字節(jié)數表示讀取的字節(jié)數,如果遇到輸入流的結尾返回 -1
int read(byte[] b,int off,int len)從輸入流讀取若干字節(jié)的數據保存到參數 b 指定的字節(jié)數組中,其中 off 是指在數組中開始保存數據位置的起始下標,len 是指讀取字節(jié)的位數。返回的是實際讀取的字節(jié)數,如果遇到輸入流的結尾則返回 -1
void close()關閉數據流,當完成對數據流的操作之后需要關閉數據流
int available()返回可以從數據源讀取的數據流的位數。
skip(long n)從輸入流跳過參數 n 指定的字節(jié)數目
boolean markSupported()判斷輸入流是否可以重復讀取,如果可以就返回 true
void mark(int readLimit)如果輸入流可以被重復讀取,從流的當前位置開始設置標記,readLimit 指定可以設置標記的字節(jié)數
void reset()使輸入流重新定位到剛才被標記的位置,這樣可以重新讀取標記過的數據

上述最后 3 個方法一般會結合在一起使用,首先使用 markSupported() 判斷,如果可以重復讀取,則使用 mark(int readLimit) 方法進行標記,標記完成之后可以使用 read() 方法讀取標記范圍內的字節(jié)數,最后使用 reset() 方法使輸入流重新定位到標記的位置,繼而完成重復讀取操作。

輸出流

在 Java 中所有輸出流類都是 OutputStream 抽象類(字節(jié)輸出流)和 Writer 抽象類(字符輸出流)的子類。其中 OutputStream 類是字節(jié)輸出流的抽象類,是所有字節(jié)輸出流的父類,其層次結構如下圖所示

?

OutputStream 類是所有字節(jié)輸出流的超類,用于以二進制的形式將數據寫入目標設備,該類是抽象類,不能被實例化。OutputStream 類提供了一系列跟數據輸出有關的方法,如下所示。

名稱作用
int write(b)將指定字節(jié)的數據寫入到輸出流
int write (byte[] b)將指定字節(jié)數組的內容寫入輸出流
int write (byte[] b,int off,int len)將指定字節(jié)數組從 off 位置開始的 len 字節(jié)的內容寫入輸出流
close()關閉數據流,當完成對數據流的操作之后需要關閉數據流
flush()刷新輸出流,強行將緩沖區(qū)的內容寫入輸出流

系統(tǒng)流

每個 Java 程序運行時都帶有一個系統(tǒng)流,系統(tǒng)流對應的類為 java.lang.System。Sytem 類封裝了 Java 程序運行時的 3 個系統(tǒng)流,分別通過 in、out 和 err 變量來引用。這 3 個系統(tǒng)流如下所示:

  • System.in:標準輸入流,默認設備是鍵盤。

  • System.out:標準輸出流,默認設備是控制臺。

  • System.err:標準錯誤流,默認設備是控制臺。

以上變量的作用域為 public 和 static,因此在程序的任何部分都不需引用 System 對象就可以使用它們。

java字符編碼介紹

計算機中,任何的文字都是以指定的編碼方式存在的,在 Java 程序的開發(fā)中最常見的是 ISO8859-1、GBK/GB2312、Unicode、 UTF 編碼。

Java 中常見編碼說明如下:

  • ISO8859-1:屬于單字節(jié)編碼,最多只能表示 0~255 的字符范圍。

  • GBK/GB2312:中文的國標編碼,用來表示漢字,屬于雙字節(jié)編碼。GBK 可以表示簡體中文和繁體中文,而 GB2312 只能表示簡體中文。GBK 兼容 GB2312。

  • Unicode:是一種編碼規(guī)范,是為解決全球字符通用編碼而設計的。UTF-8 和 UTF-16 是這種規(guī)范的一種實現,此編碼不兼容 ISO8859-1 編碼。Java 內部采用此編碼。

  • UTF:UTF 編碼兼容了 ISO8859-1 編碼,同時也可以用來表示所有的語言字符,不過 UTF 編碼是不定長編碼,每一個字符的長度為 1~6 個字節(jié)不等。一般在中文網頁中使用此編碼,可以節(jié)省空間。

    本地的默認編碼可以使用 System 類查看。Java 中 System 類可以取得與系統(tǒng)有關的信息,所以直接使用此類可以找到系統(tǒng)的默認編碼。方法如下所示:

    public static Properties getProperty()

亂碼的產生:在java的開發(fā)中,亂碼的產生是一個比較常見的問題,并且亂碼的產生只有一個原因,那就是輸出內容的編碼和接收內容的編碼不一致。

總結

以上是生活随笔為你收集整理的java 输入输出流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。