亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java IO 技術之基本流類

2019-11-15 01:07:49
字體:
來源:轉載
供稿:網友
java IO 技術之基本流類

流式IO

流(Stream)是字節的源或目的。

01

 

      兩種基本的流是:輸入流(Input Stream)和輸出流(Output Stream)??蓮闹凶x出一系列字節的對象稱為輸入流。而能向其中寫入一系列字節的對象稱為輸出流。

流的分類

節點流:從特定的地方讀寫的流類,例如:磁盤或一塊內存區域。 過濾流:使用節點流作為輸入或輸出。過濾流是使用一個已經存在的輸入流或輸出流連接創建的。

InputStream

2

三個基本的讀方法

      abstract int read() :讀取一個字節數據,并返回讀到的數據,如果返回-1,表示讀到了輸入流的末尾。       int read(byte[] b) :將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。       int read(byte[] b, int off, int len) :將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。off指定在數組b中存放數據的起始偏移位置;len指定讀取的最大字節數。

其它方法       long skip(long n) :在輸入流中跳過n個字節,并返回實際跳過的字節數。       int available() :返回在不發生阻塞的情況下,可讀取的字節數。       void close() :關閉輸入流,釋放和這個流相關的系統資源。       void mark(int readlimit) :在輸入流的當前位置放置一個標記,如果讀取的字節數多于readlimit設置的值,則流忽略這個標記。       void reset() :返回到上一個標記。       boolean markSupported() :測試當前流是否支持mark和reset方法。如果支持,返回true,否則返回false。

OutputStream

3

三個基本的寫方法      abstract void write(int b) :往輸出流中寫入一個字節。      void write(byte[] b) :往輸出流中寫入數組b中的所有字節。      void write(byte[] b, int off, int len) :往輸出流中寫入數組b中從偏移量off開始的len個字節的數據。 其它方法      void flush() :刷新輸出流,強制緩沖區中的輸出字節被寫出。      void close() :關閉輸出流,釋放和這個流相關的系統資源。

 

------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Demo1:在控制臺讀取鍵盤輸入,然后顯示。Ctrl+C結束運行 -------------------------------------------------------------------------------

import  java.io. * ;  public   class  StreamDemo   {     public   static   void  main(String[] args)  throws  Exception   {   int  data;      while  ((data  =  System.in.read())  !=   - 1 )   {   System.out.write(data);  }    }    }

------------------------------------------------------------------------------- -------------------------------------------------------------------------------

 

基本的流類

1、FileInputStream和FileOutputStream

節點流,用于從文件中讀取或往文件中寫入字節流。如果在構造FileOutputStream時,文件已經存在,則覆蓋這個文件。

------------------------------------------------------------------------------- Demo2:將字符串寫入特定文件,注意write方法只接收字符數組。 -------------------------------------------------------------------------------

import  java.io. * ;     public   class  StreamDemo   {      public   static   void  main(String[] args)  throws  Exception   {   FileOutputStream fos  =   new  FileOutputStream( " 1.txt " );      /**/ /*     * 注意:FileOutputStream的write方法接收字符數組,不能接收String字符串,   * 所以要用String的getBytes方法生成一個字符數組     */   fos.write( " http://www.49028c.com " .getBytes());   fos.close();    }    }

------------------------------------------------------------------------------- -------------------------------------------------------------------------------

String的構造方法的API: ------------ Java API: ------------ String public String(byte[] bytes,               int offset,               int length)

構造一個新的 String,方法是使用指定的字符集解碼字節的指定子數組。新的 String 的長度是一個字符集函數,因此不能等于該子數組的長度。

當給定字節在給定字符集中無效的情況下,該構造方法無指定的行為。當需要進一步控制解碼過程時,應使用 CharsetDecoder 類。

參數: bytes - 要解碼為字符的字節 offset - 要解碼的首字節的索引 length - 要解碼的字節數 拋出: IndexOutOfBoundsException - 如果 offset 和 length 參數索引字符超出 bytes 數組的范圍

從以下版本開始: JDK1.1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Demo3:將字符串寫入特定文件,注意write方法只接收字符數組。   然后通過文件輸出流讀取數據,注意使用String特定的構造方法。 -------------------------------------------------------------------------------

import  java.io. * ;  public   class  StreamDemo   {      public   static   void  main(String[] args)  throws  Exception   {  FileOutputStream fos  =   new  FileOutputStream( " 1.txt " );       /**/ /*     * 注意:FileOutputStream的write方法接收字符數組,不能接收String字符串,    * 所以要用String的getBytes方法生成一個字符數組     */    fos.write( " http://www.49028c.com " .getBytes());    fos.close();       //  使用String的這個構造方法:    //  String(byte[] bytes, int offset, int length)        FileInputStream fis  =   new  FileInputStream( " 1.txt " );    byte [] buf  =   new   byte [ 100 ];    int  len  =  fis.read(buf);       //  使用String的這個構造方法:    //  String(byte[] bytes, int offset, int length)     System.out.PRintln( new  String(buf,  0 , len));   fis.close();   //  使用完后記得關閉文件流     }    }

------------------------------------------------------------------------------- 運行結果:

-------------------------------------------------------------------------------

2、BufferedInputStream和BufferedOutputStream

過濾流,需要使用已經存在的節點流來構造,提供帶緩沖的讀寫,提高了讀寫的效率。     ------------ Java API: ------------ 構造方法摘要 BufferedOutputStream(OutputStream out)           創建一個新的緩沖輸出流,以將數據寫入指定的基礎輸出流。 BufferedOutputStream(OutputStream out, int size)           創建一個新的緩沖輸出流,以將具有指定緩沖區大小的數據寫入指定的基礎輸出流。 ------------------------------------------------------------------------------- BufferedOutputStream public BufferedOutputStream(OutputStream out) 創建一個新的緩沖輸出流,以將數據寫入指定的基礎輸出流。

參數: out - 基礎輸出流。 BufferedOutputStream public BufferedOutputStream(OutputStream out,                             int size) 創建一個新的緩沖輸出流,以將具有指定緩沖區大小的數據寫入指定的基礎輸出流。

參數: out - 基礎輸出流。 size - 緩沖區的大小。 拋出: IllegalArgumentException - 如果 size <= 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Demo4:通過一個OutputStream對象來構造一個BufferedOutputStream對象。   而FileOutputStream類是OutputStream類的子類,所以可以用它來構造。 -------------------------------------------------------------------------------

import  java.io. * ;     public   class  StreamDemo  {        public   static   void  main(String[] args)  throws  Exception  {        FileOutputStream fos  =   new  FileOutputStream( " 1.txt " );    BufferedOutputStream bos  =   new  BufferedOutputStream(fos);    bos.write( " http://www.49028c.com " .getBytes());  }    }

------------------------------------------------------------------------------- 運行結果:1.txt文件為空。原因:緩沖區沒有寫滿,程序沒有向文件寫數據。 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 解決方法1:使用flush()方法: ------------------------------------------------------------------------------- Demo4:使用flush()方法,可以使程序立即向文件寫數據。 -------------------------------------------------------------------------------

import  java.io. * ;    public   class  StreamDemo  {       public   static   void  main(String[] args)  throws  Exception  {        FileOutputStream fos  =   new  FileOutputStream( " 1.txt " );    BufferedOutputStream bos  =   new  BufferedOutputStream(fos);    bos.write( " http://www.49028c.com " .getBytes());      bos.flush();  }    }

------------------------------------------------------------------------------- 運行結果:數據被寫入相應的文件。 ------------------------------------------------------------------------------- 解決方法2:使用close()方法: ------------------------------------------------------------------------------- Demo5:使用close()方法,同樣可以使程序立即向文件寫數據。 -------------------------------------------------------------------------------

import  java.io. * ;      public   class  StreamDemo  {        public   static   void  main(String[] args)  throws  Exception  {        FileOutputStream fos  =   new  FileOutputStream( " 1.txt " );   BufferedOutputStream bos  =   new  BufferedOutputStream(fos);   bos.write( " http://www.49028c.com " .getBytes());      bos.close();  }    }

------------------------------------------------------------------------------- 運行結果:數據被寫入相應的文件。 -------------------------------------------------------------------------------

flush()和close()的區別: 還要使用流對象,還需要寫數據,使用flush(),否則使用close()。

另外,使用close()將關閉自己的流對象,同時會關閉與之相關的流對象,如FileOutputStream流。

 

------------------------------------------------------------------------------- Demo6:使用BufferedInputStream流,從文件中讀取數據。   同樣要用InputStream流對象或者其子類的對象來構造。 -------------------------------------------------------------------------------

import  java.io. * ;    public   class  StreamDemo  {        public   static   void  main(String[] args)  throws  Exception  {        FileOutputStream fos  =   new  FileOutputStream( " 1.txt " );   BufferedOutputStream bos  =   new  BufferedOutputStream(fos);    bos.write( " http://www.49028c.com " .getBytes());      bos.close();      FileInputStream fis  =   new  FileInputStream( " 1.txt " );   BufferedInputStream bis  =   new  BufferedInputStream(fis);    byte [] buf  =   new   byte [ 100 ];    int  len  =  bis.read(buf);       //  使用String的這個構造方法:    //  String(byte[] bytes, int offset, int length)     System.out.println( new  String(buf,  0 , len));   bis.close();  }    }

------------------------------------------------------------------------------- 運行結果: -------------------------------------------------------------------------------

 

3、DataInputStream和DataOutputStream

過濾流,需要使用已經存在的節點流來構造,提供了讀寫Java中的基本數據類型的功能。 ------------ Java API: ------------ java.io 類 DataOutputStream java.lang.Object   java.io.OutputStream       java.io.FilterOutputStream           java.io.DataOutputStream 所有已實現的接口: Closeable, DataOutput, Flushable public class DataOutputStream extends FilterOutputStream implements DataOutput

數據輸出流允許應用程序以適當方式將基本 Java 數據類型寫入輸出流中。然后,應用程序可以使用數據輸入流將數據讀入。

 

從以下版本開始: JDK1.0 ------------------------------------------------------------------------------- 構造方法摘要 DataOutputStream(OutputStream out)           創建一個新的數據輸出流,將數據寫入指定基礎輸出流。 ------------------------------------------------------------------------------- DataOutputStream public DataOutputStream(OutputStream out) 創建一個新的數據輸出流,將數據寫入指定基礎輸出流。計數器 written 被設置為零。

參數: out - 基礎輸出流,將被保存供以后使用。 ------------------------------------------------------------------------------- Demo7:使用DataOutputStream流,將基本數據類型以二進制形式寫入文件中。   同樣要用InputStream流對象或者其子類的對象來構造,   這里使用BufferedOutputStream對象來構造。 -------------------------------------------------------------------------------

import  java.io. * ;    public   class  StreamDemo  {      public   static   void  main(String[] args)  throws  Exception  {      FileOutputStream fos  =   new  FileOutputStream( " dos.txt " );   //  獲得寫入文件功能     BufferedOutputStream bos  =   new  BufferedOutputStream(fos);  //  獲得緩沖功能     DataOutputStream dos  =   new  DataOutputStream(bos);   //  獲得寫入基本類型功能          /*     * 定義8種基本類型的對象     */     byte  b  =   3 ;    short  s  =   4 ;    int  i  =   78 ;    long  l  =   100000 ;     char  ch  =   ' a ' ;    boolean  bl  =   false ;    float  f  =   4.5f ;    double  d  =   4.0001 ;        /*     * 將8種基本類型的對象寫入文件中     */    dos.writeByte(b);   dos.writeShort(s);   dos.writeInt(i);   dos.writeLong(l);   dos.writeChar(ch);   dos.writeBoolean(bl);   dos.writeFloat(f);   dos.writeDouble(d);   dos.close();  }    }

------------------------------------------------------------------------------- 運行結果:8種基本類型的數據以二進制形式寫入指定的文件中。 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Demo8:從指定的文件中讀取8種基本類型的數據 -------------------------------------------------------------------------------

import  java.io. * ;    public   class  StreamDemo  {      public   static   void  main(String[] args)  throws  Exception  {      FileOutputStream fos  =   new  FileOutputStream( " dos.txt " );   //  獲得寫入文件功能     BufferedOutputStream bos  =   new  BufferedOutputStream(fos);  //  獲得緩沖功能     DataOutputStream dos  =   new  DataOutputStream(bos);   //  獲得寫入基本類型功能          /*     * 定義8種基本類型的對象     */     byte  b  =   3 ;    short  s  =   4 ;    int  i  =   78 ;    long  l  =   100000 ;     char  ch  =   ' a ' ;    boolean  bl  =   false ;    float  f  =   4.5f ;    double  d  =   4.0001 ;        /*     * 將8種基本類型的對象寫入文件中     */    dos.writeByte(b);   dos.writeShort(s);   dos.writeInt(i);   dos.writeLong(l);   dos.writeChar(ch);   dos.writeBoolean(bl);   dos.writeFloat(f);   dos.writeDouble(d);   dos.close();      FileInputStream fis  =   new  FileInputStream( " dos.txt " );   BufferedInputStream bis  =   new  BufferedInputStream(fis);   DataInputStream dis  =   new  DataInputStream(bis);   System.out.println(dis.readByte());   System.out.println(dis.readShort());   System.out.println(dis.readInt());   System.out.println(dis.readLong());   System.out.println(dis.readChar());   System.out.println(dis.readBoolean());   System.out.println(dis.readFloat());   System.out.println(dis.readDouble());   dis.close();  }    }

------------------------------------------------------------------------------- 運行結果:數據正常輸出: 3 4 78 100000 a false 4.5 4.0001 -------------------------------------------------------------------------------

 

4、PipedInputStream和PipedOutputStream

管道流,用于線程間的通信。一個線程的PipedInputStream對象從另一個線程的PipedOutputStream對象讀取輸入。要使管道流有用,必須同時構造管道輸入流和管道輸出流。 ------------------------------------------------------------------------------- ------------ Java API: ------------ java.io 類 PipedInputStream java.lang.Object   java.io.InputStream       java.io.PipedInputStream 所有已實現的接口: Closeable public class PipedInputStream extends InputStream

傳送輸入流應該連接到傳送輸出流;傳送輸入流會提供要寫入傳送輸出流的所有數據字節。通常,數據由某個線程從 PipedInputStream 對象讀取,并由其他線程將其寫入到相應的 PipedOutputStream。不建議對這兩個對象嘗試使用單個線程,因為這樣可能會死鎖該線程。傳送輸入流包含一個緩沖區,可在緩沖區限定的范圍內將讀操作和寫操作分離開。 從以下版本開始: JDK1.0 ------------------------------------------------------------------------------- ------------ Java API: ------------ java.io 類 PipedOutputStream java.lang.Object   java.io.OutputStream       java.io.PipedOutputStream 所有已實現的接口: Closeable, Flushable public class PipedOutputStream extends OutputStream

傳送輸出流可以連接到傳送輸入流,以創建通信管道。傳送輸出流是管道的發送端。通常,數據由某個線程寫入 PipedOutputStream 對象,并由其他線程從連接的 PipedInputStream 讀取。不建議對這兩個對象嘗試使用單個線程,因為這樣可能會死鎖該線程。

從以下版本開始: JDK1.0 ------------------------------------------------------------------------------- ------------ Java API: ------------ connect public void connect(PipedInputStream snk)              throws IOException 將此傳送輸出流連接到接收者。如果此對象已經連接到其他某個傳送輸入流,則拋出 IOException。

如果 snk 為未連接的傳送輸入流,而 src 為未連接的傳送輸出流,則可以通過以下任一調用使其連接: src.connect(snk) 或: snk.connect(src) 這兩個調用的效果相同。

參數: snk - 要連接的傳送輸入流。 拋出: IOException - 如果發生 I/O 錯誤。 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Demo9:利用管道輸入流和輸出流進行通訊。 -------------------------------------------------------------------------------

import  java.io. * ;    public   class  PipedStreamDemo  {      public   static   void  main(String[] args)  {   PipedOutputStream pos  =   new  PipedOutputStream();   PipedInputStream pis  =   new  PipedInputStream();        try   {    pos.connect(pis);      // pis.connect(pos); 二選一即可           new  Producer(pos).start();     new  Consumer(pis).start();    }   catch  (IOException e)  {     //  TODO 自動生成 catch 塊      e.printStackTrace();   }   }    }     /*   * 生產者線程   */   class  Producer  extends  Thread  {     private  PipedOutputStream pos;      public  Producer(PipedOutputStream pos)  {    this .pos  =  pos;  }       public   void  run()  {     try   {    pos.write( " Hello, welcome you! " .getBytes());    pos.close();    }   catch  (Exception e)  {    e.printStackTrace();   }   }    }     /*   * 消費者線程   */   class  Consumer  extends  Thread  {     private  PipedInputStream pis;      public  Consumer(PipedInputStream pis)  {    this .pis  =  pis;  }       public   void  run()  {     try   {     byte [] buf  =   new   byte [ 100 ];     int  len  =  pis.read(buf);    System.out.println( new  String(buf,  0 , len));    pis.close();   //  關閉輸入流     }   catch  (Exception e)  {    e.printStackTrace();   }   }    }

------------------------------------------------------------------------------- 運行結果:輸出Hello, welcome you! -------------------------------------------------------------------------------

轉自:http://www.blogjava.net/coderdream/articles/65609.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品海角社区在线观看| 国产精品免费福利| 美女福利精品视频| 隔壁老王国产在线精品| 亚洲精品国产欧美| 亚洲一级黄色片| 精品高清一区二区三区| 欧美怡红院视频一区二区三区| 91精品久久久久久久久久久| 国产精品久久久久久超碰| 欧美电影院免费观看| 国产精品久久久久久av福利| 一区二区三区天堂av| 欧洲亚洲在线视频| 综合激情国产一区| 91po在线观看91精品国产性色| 欧美精品手机在线| 午夜精品久久久久久久久久久久久| 欧美成人中文字幕在线| 国产999精品| 久久最新资源网| 国产精品成人在线| 亚洲精品v天堂中文字幕| 久久精品99久久久香蕉| 日韩av电影在线免费播放| 国产女同一区二区| 久久久精品在线| 亚洲tv在线观看| 亚洲一区国产精品| 欧美性高潮在线| 有码中文亚洲精品| 日韩av日韩在线观看| 国产成人中文字幕| 亚洲韩国青草视频| 国产精品丝袜久久久久久高清| 欧美视频中文字幕在线| 亚洲欧美日韩国产中文专区| 日韩精品电影网| 国产精品久久久av久久久| 日韩免费av在线| 国产一区二区三区在线播放免费观看| 九九久久国产精品| 成人黄色短视频在线观看| 日韩av免费在线观看| 国产aⅴ夜夜欢一区二区三区| 欧美成人合集magnet| 亚洲国产婷婷香蕉久久久久久| 自拍视频国产精品| 伊人久久男人天堂| 91网站免费观看| 亚洲最新视频在线| 欧美夫妻性生活视频| 久久影视电视剧免费网站清宫辞电视| 国产精品福利在线观看网址| 丝袜亚洲欧美日韩综合| 国产丝袜一区视频在线观看| 欧美做爰性生交视频| 日本伊人精品一区二区三区介绍| 欧美极品第一页| 国产精品激情自拍| 亚洲欧美色婷婷| 亚洲老头同性xxxxx| 久久青草精品视频免费观看| 欧美日韩亚洲高清| 一本大道久久加勒比香蕉| 国产精品偷伦免费视频观看的| 国产成人精品视频在线| 欧美福利视频在线| 欧美精品久久久久久久免费观看| 色久欧美在线视频观看| 国产欧美日韩免费| 国产剧情久久久久久| 日韩av在线免费播放| 亚洲国产97在线精品一区| 色天天综合狠狠色| 黑人精品xxx一区| 国产成人亚洲综合91精品| 国产丝袜一区视频在线观看| 中文字幕亚洲综合久久| 日韩一区二区精品视频| 国产精品自拍小视频| 精品亚洲一区二区三区在线观看| 国产视频久久久久久久| 久久精品国产免费观看| 亚洲iv一区二区三区| 欧美成人亚洲成人日韩成人| 国产精品直播网红| 欧美精品激情在线观看| 69精品小视频| 中国人与牲禽动交精品| 久久久久国产精品一区| 在线观看成人黄色| 国产欧美va欧美va香蕉在线| 国产精品视频一区二区高潮| 亚洲日本欧美日韩高观看| 国产不卡在线观看| 久久在线免费观看视频| 欧美国产日韩免费| 久久影视电视剧凤归四时歌| 日韩av在线免费观看| 亚洲国产天堂久久国产91| 3344国产精品免费看| 在线电影欧美日韩一区二区私密| 亚洲欧洲日产国产网站| 欧美日韩中国免费专区在线看| 欧美大片第1页| 热久久免费视频精品| 欧美黑人巨大xxx极品| 亚洲国产小视频| 九色91av视频| 国产精品国产自产拍高清av水多| 国产91成人在在线播放| 17婷婷久久www| 日本精品久久电影| 久久影院免费观看| 亚洲精品视频在线观看视频| 成人动漫网站在线观看| 在线激情影院一区| 成人免费高清完整版在线观看| 亚洲图片欧美日产| 国内精品一区二区三区| 亚洲www永久成人夜色| 久久久久这里只有精品| 欧美大胆在线视频| 国产精品露脸自拍| 中文字幕在线日韩| 黄网站色欧美视频| 亚洲free性xxxx护士白浆| 欧美日韩成人免费| 精品美女国产在线| 国产91精品黑色丝袜高跟鞋| 91国自产精品中文字幕亚洲| 欧美日韩中文字幕| 亚洲精品xxxx| 在线视频精品一| 国产成人综合精品| 国产精品一区二区三| 久久成人在线视频| 国产精品一区二区女厕厕| 久久精品亚洲精品| 欧洲成人在线视频| 亚洲美女av电影| 欧美日韩国产在线| 全色精品综合影院| 亚洲视频自拍偷拍| 中文字幕av一区二区| 91国内揄拍国内精品对白| 国产精品入口免费视频一| 欧美理论电影在线播放| 亚洲色图偷窥自拍| 国产一区二区三区高清在线观看| 欧美黄色免费网站| 国产一区二区在线播放| 538国产精品视频一区二区| 国产亚洲精品久久久优势| 7m精品福利视频导航| 国产精品激情av在线播放| 日韩女优人人人人射在线视频| 国产成人精品免高潮在线观看| 国内免费久久久久久久久久久| 黑人巨大精品欧美一区二区三区| 欧美成人免费播放| 欧美精品videosex牲欧美| 日韩免费在线免费观看|