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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java bufferedwriter 写入tab_Java基础-IO流

發布時間:2023/12/19 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java bufferedwriter 写入tab_Java基础-IO流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

流的原理
在Java程序中,對于數據的輸入/ 輸出操作以“流” (stream) 方式進 行;
J2SDK提供了各種各樣的“流”類, 用以獲取不同種類的數據;程序 中通過標準的方法輸入或輸出數 據。

Java的流類型一般位于 java . IO 包中

數據源

data source. 提供原始數據的原始媒介。常見的:數據庫、文件、其他程序、內存、網絡連接、IO設備。

數據源就像水箱,流就像水管中流著的水流,程序就是我們最終的用戶。 流是一個抽象、動 態的概念,是一連串連續動態的數據集合。

流的分類
流的方向:
輸入流:數據源到程序(InputStream、Reader讀進來)
輸出流:程序到目的地(OutPutStream、Writer寫出去)
處理數據單元:
字節流:按照字節讀取數據(InputStream、OutputStream)

字符流:按照字符讀取數據(Reader、Writer)

功能不同:

節點流:可以直接從數據源或目的地讀寫數據。

處理流(包裝流):不直接連接到數據源或目的地,是其他流進行封裝。目的主要是簡化操作和提高性能.

節點流和處理流的關系:

節點流處于io操作的第一線,所有操作必須通過他們進行;

處理流可以對其他流進行處理(提高效率或操作靈活性)

IO流類的體系

InputStream和OutputStream

Java語言中最基本的兩個字節輸入輸出類。
其他所有字節輸入輸出流類都繼承自這兩個基類。
這兩個類都是抽象類,不能創建它們的實例,只能使用它們的子類.

Reader和Writer

Java語言中最基本的兩個字符輸入輸出類。
其他所有字符輸入輸出流類都繼承自這兩個基類。
這兩個類都是抽象類,不能創建它們的實例,只能使用它們的子類

FileInputStream/FileOutputStream
使用FileInputStream讀取文件內容
abstract int read( );
int read( byte b[ ] );
int read( byte b[ ], int off, int len );
int available( );
close( );
使用FileOutputStream寫內容到文件
abstract void write( int b );
void write( byte b[ ] );
void write( byte b[ ], int off, int len );
void flush( );
void close( );
使用FileInputStream/FileOutputStream復制文件
FileReader和FileWriter
使用FileReader和FileWriter完成文件復制

緩沖字節流
BufferedInputStream和BufferedOutputStream
FileInputStream和FileOutputStream是節電流
BufferedInputStream和BufferedOutputStream是處理流(包裝流)
讀文件和寫文件都使用了緩沖區,減少了讀寫次數,從而提高了效率
當創建這兩個緩沖流的對象時時,會創建了內部緩沖數組,缺省使用32字節大小的緩沖區.
當讀取數據時,數據按塊讀入緩沖區,其后的讀操作則直接訪問緩沖區
當寫入數據時,首先寫入緩沖區,當緩沖區滿時,其中的數據寫入所連接的輸出流。使用方 法flush()可以強制將緩沖區的內容全部寫入輸出流
關閉流的順序和打開流的順序相反.只要關閉高層流即可,關閉高層流其實關閉的底層節點流Flush的使用:
手動將buffer中內容寫入文件
緩沖字符流
BufferedReader
readLine() 讀取一個文本行的數據
BufferedWriter
newLine(); 寫入一個行分隔符。

使用緩沖字符流是復制文本文件常用的方式

轉換流

InputStreamReader和OutputStreamWriter

用于將字節流轉化成字符流,字符流與字節流之間的橋梁

InputStreamReader的作用是把InputStream轉換成Reader

OutputStreamWriter的作用是把OutputStream轉換成Writer

存在將字節流轉換成字符流的轉換流,因為字符流操作文本更簡單

不存在把字符流轉換成字節流的轉換流,因為沒有必要

System. in 代表標準輸入,即鍵盤輸入,是InputStream的

打印流

PrintStream

PrintStream提供了一系列的print()和println(),可以實現將基本數據類型格式化成字符串輸出。 對象類型將先調用

toString(),然后輸出該方法返回的字符串

System.out就是PrintStream的一個實例,代表顯示器

System.err 也是PrintStream的一個實例,代表顯示器

PrintStream的輸出功能非常強大,通常需要輸出文本內容,都可以將輸出流包裝成 PrintStream后進行輸出

PrintStream的方法都不拋出IOException
PrintWriter
PrintStream的對應字符流,功能相同,方法對應。
PrintWriter的方法也不拋出IOException
復制文件時可以使用PrintWriter代替BufferedWriter完成,更簡單
緩沖字節流
DataInputStream和DataOutputStream
提供了可以存取所有Java基礎類型數據(如:int,double 等)和String的方法。

處理流,只針對字節流,二進制文件

對象序列化

對象序列化 (Serialization)

將Java對象轉換成字節序列(IO字節流)

對象反序列化 (DeSerialization)

從字節序列中恢復Java對象

為什么序列化

序列化以后的對象可以保存到磁盤上,也可以在網絡上傳輸,使得不同的計算機可以共享對 象.(序列化的字節序列是平臺無關的)

對象序列化的條件

只有實現了Serializable接口的類的對象才可以被序列化。Serializable接口中沒有任何的方法,實現 該接口的類不需要實現額外的方法。

如果對象的屬性是對象,屬性對應類也必須實現Serializable接口

序列化能保存的元素

只能保存對象的非靜態成員變量

不能保存任何成員方法和靜態的成員變量

不保存transient成員變量

如果一個對象的成員變量是一個對象,這個對象的成員變量也會保存

串行化保存的只是變量的值,對于變量的任何修飾符,都不能保存

使用對象流把一個對象寫到文件時不僅保證該對象是序列化的,而且該對象的成員 對象也必須是可序列化的。

如果一個可序列化的對象包含對某個不可序列化的對象的引用,那么整個序列化操 作將會失敗,并且會拋出一NotSerializableException。我們可以將這個引用標記為 transient,那么對象仍然可以序列化。

同一個對象多次序列化的處理

所有保存到磁盤中的對象都有一個序列化編號

序列化一個對象中,首先檢查該對象是否已經序列化過

如果沒有,進行序列化

如果已經序列化,將不再重新序列化,而是輸出編號即可

如果不希望某些屬性(敏感)序列化,或不希望出現遞歸序列

為屬性添加transient關鍵字(完成排除在序列化之外)

自定義序列化(不僅可以決定哪些屬性不參與序列化,還可以定義屬性具體如何序列化)

序列化版本不兼容

修改了實例屬性后,會影響版本號,從而導致反序列化不成功

解決方案:為Java對象指定序列化版本號serialVersionUID

字節/字符數組/字符串流

ByteArrayInutStream和ByteArrayOutputStream

數據源或目的地為:字節數組
只有字節流,沒有字符流
節點流
CharArrayReader和CharArrayWriter
數據源或目的地為:字符數組
只有字符流,沒有字節流
節點流
StringReader和StringWriter
數據源或目的地為:字符串
只有字符流,沒有字節流
節點流

IO總結

總結

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

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