亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Java中的IO流之輸入流|樂(lè)字節(jié)

elliott_hu / 2148人閱讀

摘要:上一篇寫(xiě)到了流,這篇文章著重談?wù)勢(shì)斎肓?,再下次再說(shuō)輸出流。一輸入流字節(jié)流和字符流的操作方式幾乎完全一樣,只是操作的數(shù)據(jù)單元不同而已。返回結(jié)果為時(shí)表明到了輸入流的結(jié)束點(diǎn)。

親愛(ài)的樂(lè)字節(jié)的小伙伴們,小樂(lè)又來(lái)分享Java技術(shù)文章了。上一篇寫(xiě)到了IO流,這篇文章著重 談?wù)勢(shì)斎肓?,再下次再說(shuō)輸出流。

一、 輸入流

字節(jié)流和字符流的操作方式幾乎完全一樣,只是操作的數(shù)據(jù)單元不同而已 。字節(jié)流可

以操作所有文件,字符流僅操作純文本。

1、抽象類(lèi):InputStream 和 Reader

InputStream和Reader是所有輸入流的基類(lèi),它們是兩個(gè)抽象類(lèi),是所有輸入流的模版,其中定義的方法在所有輸入流中都可以使用。

在InputStream里包含如下三個(gè)方法:

在Reader中包含如下三個(gè)方法:

對(duì)比InputStream和Reader 所提供的方法,可以看出這兩個(gè)基類(lèi)的功能基本相似。返回結(jié)果為-1 時(shí)表明到了輸入流的結(jié)束點(diǎn)。 InputStream 和 Reade 都是抽象的,不能直接創(chuàng)建它們的實(shí)例,可以使用它們的子類(lèi)。

2、文件節(jié)點(diǎn)類(lèi): FileInputStream 和 FileReader

FileInputStream 和 FileReader,它們都是節(jié)點(diǎn)流,直接和指定文件關(guān)聯(lián)。 操作方式

基本一致。

1)、單個(gè)字節(jié)讀取

以FileInputStream為例:

public class SingleFileRead {
    public static void main(String[] args) {
        // 1、建立聯(lián)系 File對(duì)象
        File file = new File("f:/IO/test.txt");
        // 2、選擇流
        InputStream in = null;// 提升作用域
        try {
            in = new FileInputStream(file);
            // 3、操作 單個(gè)字節(jié)讀取
        long fileLength = file.length(); // 接收實(shí)際讀取的字節(jié)數(shù)
            // 計(jì)數(shù)器
            System.out.println(fileLength);
            long num = 0;
            // 循環(huán)讀取
            while (num < fileLength) {
                char ch = (char) in.read();
                System.out.println(ch);
                num++;
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("文件不存在,不能進(jìn)行下一步操作");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("讀取文件失敗");
        } finally {
            try {
                // 4、釋放資料
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("關(guān)閉文件輸入流失敗");
            }
        }
    }
}

2)、批量讀取(字節(jié)|字符重點(diǎn))

public class ReadFile {
    public static void main(String[] args) {
        //1、字節(jié)讀?。航⒙?lián)系    File對(duì)象
        File file=new File("f:/IO/test.txt");
        //2、選擇流
        InputStream in=null;//提升作用域
        try {
            in=new FileInputStream(file);
            //3、操作   不斷讀取   緩沖數(shù)組
            byte[]car=new byte[1024];
            int len=0;    //接收實(shí)際讀取的大小
            //循環(huán)讀取
            while(-1!=(len=in.read(car))){
                //輸出,字節(jié)數(shù)組轉(zhuǎn)成字符串
                String info=new String(car,0,len);
                System.out.println(info);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("文件不存在");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("讀取文件失敗");
        }finally{
            try {
                //4、釋放資料
                if(in!=null){
                    in.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("關(guān)閉文件輸入流失敗");
            }
        }
    }
}
//字符讀取1、創(chuàng)建源
        File src=new File("f:/char.txt");
        //2、選擇流
        Reader reader=new FileReader(src);
             //3、讀取操作
        char[] flush=new char[1024];
        int len=0;
        while(-1!=(len=reader.read(flush))){
            //字符數(shù)組轉(zhuǎn)換為字符串
            String str=new String(flush,0,len);
            System.out.println(str);
        }
//4、釋放資源 
          reader.close();
樂(lè)字節(jié)原創(chuàng)
3、緩沖處理類(lèi):BufferedInputStream和 BufferedReader(重點(diǎn))

緩沖提高性能: 字節(jié)流直接套上即可;字符緩沖流 +新增方法(不能使用多態(tài))

//1、創(chuàng)建源,建立聯(lián)系   
File src =new File("test.txt"); 
//2、選擇緩沖流   
    InputStream is =new BufferedInputStream(new FileInputStream(src));   //3、操作  :  多個(gè)讀取        
    byte[] car =new byte[2]; 
    int len =0;       
while(-1!=(len=is.read(car))){          
//獲取數(shù)組的內(nèi)容   字節(jié)數(shù)組轉(zhuǎn)字符串  new String(字節(jié)數(shù)組,0,length) 
      System.out.println(new String(car,0,len));           
    } 
    //4、釋放資源 
    is.close(); 
//創(chuàng)建源:   
    File src =new File("test.txt"); 
//使用字符緩沖流  提高性能讀取文件  +新增方法(不能使用多態(tài)) 
    BufferedReader br =new BufferedReader(new FileReader(src)); 
//操作  行讀取
String line=null; 
while(null!=(line=br.readLine())){ 
        System.out.println(line); 
} 
//釋放資源     
br.close();
4、轉(zhuǎn)換處理流: InputStreamReader

轉(zhuǎn)換流:將字節(jié)流轉(zhuǎn)為字符流 處理亂碼(編碼集、解碼集)。

//讀取文件 
    File src =new File("test.txt"); 
//轉(zhuǎn)換流 
    BufferedReader br =new BufferedReader( 
          new InputStreamReader( 
                new BufferedInputStream( 
                      new FileInputStream( 
                            src 
                          )             
       
                    ),"utf-8" 
              )         
        ); 
//行讀取 
    String msg =null; 
    while(null!=(msg =br.readLine())){ 
      System.out.println(msg); 
    } 
    br.close();
5、字節(jié)數(shù)組節(jié)點(diǎn)類(lèi): ByteArrayInputStream

操作的節(jié)點(diǎn)為字節(jié)數(shù)組,數(shù)組在jvm 內(nèi)存中,由垃圾回收機(jī)制管理,不需要手動(dòng)關(guān)閉

//1、創(chuàng)建源 
    byte[] src ="io 學(xué)習(xí)入門(mén)".getBytes(); 
//2、選擇流 
InputStream is = new ByteArrayInputStream(src);
//3、操作 與文件一致 
  byte[] flush =new byte[10]; 
  int len =0; 
  while(-1!=(len =is.read(flush))){ 
    System.out.println(new String(flush,0,len)); 
  } 
//4、釋放  
  is.close();
6、數(shù)據(jù)處理流:DataInputStream

可以處理基本類(lèi)型+String,保留數(shù)據(jù)的類(lèi)型。前提是讀取順序與寫(xiě)出順序一致,否則讀取數(shù)據(jù)不正確

/**
     * 數(shù)據(jù)+類(lèi)型    輸出到文件
     * @param destPath
     * @throws IOException 
     */
    public static void write(String destPath) throws IOException{
        int point=2;
        long num=100L;
        String str="數(shù)據(jù)類(lèi)型";
        //創(chuàng)建源
        File dest=new File(destPath);
        //選擇流
        DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dest)));
        //操作    寫(xiě)出的順序         為讀取作準(zhǔn)備
        dos.writeInt(point);
        dos.writeLong(num);
        dos.writeUTF(str);
        dos.flush();
        //釋放資源
        dos.close();
    }
7、對(duì)象處理流(反序列化):ObjectInputStream
/**
     * 反序列化:
     * 1、先寫(xiě)入再讀取
     * 2、讀取對(duì)象需要知道具體類(lèi)型,依次讀取
     * 注意:
     * 1)不是所有的對(duì)象都可以序列化    Serializable
     * 2)不是所有的屬性都需要序列化    transient    
     */    
public static void read(String srcPath) throws FileNotFoundException, IOException, ClassNotFoundException{
        //創(chuàng)建源
        File src=new File(srcPath);
        //選擇流    OjbectInputStream
        ObjectInputStream dis=new ObjectInputStream(
                new BufferedInputStream(
                        new FileInputStream(src)
                        )
                );
        //操作    讀取的順序與寫(xiě)出的順序一致        必須存在才能讀取
        Object obj=dis.readObject();
        if(obj instanceof Employee){
            Employee emp=(Employee)obj;
            System.out.println(emp.getName());
            System.out.println(emp.getSalary());
        }
        obj=dis.readObject();
        int[]arr=(int[])obj;
        System.out.println(Arrays.toString(arr));
        //釋放資源
        dis.close();
    }

Java中的IO流-輸入流就介紹到這里了,下次再說(shuō)輸出流。

樂(lè)字節(jié)原創(chuàng),更多Java技術(shù)干貨持續(xù)更新,歡迎關(guān)注。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/75722.html

相關(guān)文章

  • Java中的IO輸出|樂(lè)字節(jié)

    摘要:大家好,樂(lè)字節(jié)小樂(lè)又來(lái)了。上一篇給大家?guī)?lái)的是中的流之輸入流樂(lè)字節(jié),本文將繼續(xù)講述流之輸出流。一輸出流抽象類(lèi)和和也非常相似。從上述的字節(jié)數(shù)組中,讀取字符串。 大家好,樂(lè)字節(jié)小樂(lè)又來(lái)了。上一篇給大家?guī)?lái)的是:Java中的IO流之輸入流|樂(lè)字節(jié),本文將繼續(xù)講述IO流之輸出流。showImg(https://segmentfault.com/img/bVbvQx1?w=600&h=338);...

    CoderStudy 評(píng)論0 收藏0
  • Java網(wǎng)絡(luò)編程探究|樂(lè)字節(jié)

    摘要:換句話說(shuō),套接字起到通信端點(diǎn)的作用。單個(gè)套接字是一個(gè)端點(diǎn),而一對(duì)套接字則構(gòu)成一個(gè)雙向通信信道,使非關(guān)聯(lián)進(jìn)程可以在本地或通過(guò)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交換。 大家好,我是樂(lè)字節(jié)小樂(lè),上次給大家講述了Java中的IO流之輸出流|樂(lè)字節(jié),本文將會(huì)給大家講述網(wǎng)絡(luò)編程。 主要內(nèi)容如下: 網(wǎng)絡(luò) 網(wǎng)絡(luò)分層 列表項(xiàng)目 IP位置 端口port 網(wǎng)絡(luò)編程 showImg(https://segmentfault.c...

    Kahn 評(píng)論0 收藏0
  • 樂(lè)字節(jié)Java之file、IO基礎(chǔ)知識(shí)和操作步驟

    摘要:流分類(lèi)由此可見(jiàn),流很龐大從不同角度進(jìn)行分類(lèi)數(shù)據(jù)分類(lèi)按處理數(shù)據(jù)單位分為字節(jié)流和字符流。處理數(shù)據(jù)是音頻視頻文本等一切為字節(jié)流,僅能處理文本的為字符流。功能分類(lèi)節(jié)點(diǎn)流和處理流。從向一個(gè)特定的設(shè)備磁盤(pán)網(wǎng)絡(luò)等讀寫(xiě)數(shù)據(jù)的流稱(chēng)為節(jié)點(diǎn)流,也常被稱(chēng)為低級(jí)流。 嗨嘍,小樂(lè)又來(lái)了,今天要給大家送上的技術(shù)文章是Java重點(diǎn)知識(shí)-IO流。 先來(lái)看看IO流的思維導(dǎo)圖吧。showImg(https://segmen...

    pkhope 評(píng)論0 收藏0
  • Java編程基礎(chǔ)23——IO(其他)&Properties

    摘要:但它融合了和的功能。支持對(duì)隨機(jī)訪問(wèn)文件的讀取和寫(xiě)入。的概述和作為集合的使用了解的概述類(lèi)表示了一個(gè)持久的屬性集??杀4嬖诹髦谢驈牧髦屑虞d。屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串。 1_序列流(了解) 1.什么是序列流 序列流可以把多個(gè)字節(jié)輸入流整合成一個(gè), 從序列流中讀取數(shù)據(jù)時(shí), 將從被整合的第一個(gè)流開(kāi)始讀, 讀完一個(gè)之后繼續(xù)讀第二個(gè), 以此類(lèi)推. 2.使用方式 整合兩個(gè): S...

    vvpale 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8新特性之Stream(上)

    摘要:需要注意的是很多流操作本身就會(huì)返回一個(gè)流,所以多個(gè)操作可以直接連接起來(lái),如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實(shí)現(xiàn)數(shù)據(jù)流并行處理操作。為集合創(chuàng)建并行流。 上一篇文章,小樂(lè)給大家介紹了《Java8新特性之方法引用》,下面接下來(lái)小樂(lè)將會(huì)給大家介紹Java8新特性之Stream,稱(chēng)之為流,本篇文章為上半部分。 1、什么是流? Java Se中對(duì)于流的操作有輸入輸出IO流,而Jav...

    dingda 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<