1. 程式人生 > >Java基礎IO類之字串流(查字串中的單詞數量)與管道流

Java基礎IO類之字串流(查字串中的單詞數量)與管道流

一、字串流

定義:字串流(StringReader),以一個字元為資料來源,來構造一個字元流。

作用:在Web開發中,我們經常要從伺服器上獲取資料,資料返回的格式通常一個字串(XML、JSON),我們需要把這個字串構造為一個字元流。然後再用第三方資料解析器來解析資料。

程式碼示例:計算一個字串有多少個單詞

package IODemo;

import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;


/** 
 * 注意 有可能是面試題目
 *
 */

public class StringStreamDemo {

    private static void stringReader(){

        String str = "good good study day day up";
        StringReader sr = new StringReader(str);
        // 流的標記器(分析這個流裡面的內容)  字元值用於查詢字元的五個可能屬性: 空格 , 字母 , 數字 , 字串引號和註釋字元 。 每個角色都可以有零個或多個這些屬性。
        StreamTokenizer st = new StreamTokenizer(sr);
        int count = 0;
        // ttype 在讀取後的這個標記型別等於結尾的話就要一直迴圈讀
        while (st.ttype != StreamTokenizer.TT_EOF){
            try {
                //如果 讀了這個流裡面的內容的是一個單詞的話 就累加
                if (st.nextToken() == StreamTokenizer.TT_WORD){
                    count++;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("count="+count);
        sr.close();
    }



    public static void main(String[] args) {

        stringReader();
    }
}

 

二、管道流 

管道輸入流:

PipedInputStream:
  • 管道輸入流應連線到管道輸出流; 管道輸入流然後提供寫入管道輸出流的任何資料位元組。
  • 典型地,資料被從一個讀PipedInputStream物件由一個執行緒並且資料被寫入到對應的PipedOutputStream通過一些其它執行緒。
  • 不建議嘗試從單個執行緒使用這兩個物件,因為它可能會使執行緒死鎖。
  • 管道輸入流包含一個緩衝區,在讀取操作中將讀取操作與限制內的操作相分離的管道被認為是broken如果正在提供的資料位元組到連線的管道輸出流中的執行緒不再存活。

 

管道輸出流:

PipedOutputStream:
  • 管道輸出流可以連線到管道輸入流以建立通訊管道。 管道輸出流是管道的傳送端。
  • 典型地,資料被寫入到一個PipedOutputStream由一個執行緒物件和資料被從連線讀取PipedInputStream通過一些其它執行緒。
  • 不建議嘗試從單個執行緒使用這兩個物件,因為它可能會使執行緒死鎖。 管被說成是broken如果從連線讀取資料位元組的螺紋管道輸入流不再存活。

 

程式碼示例:

package IODemo;

import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;


/**
 * 注意 有可能是面試題目
 *
 */
public class StringStreamDemo {

    private static void stringReader(){

        String str = "good good study day day up";
        StringReader sr = new StringReader(str);
        // 流的標記器(分析這個流裡面的內容)  字元值用於查詢字元的五個可能屬性: 空格 , 字母 , 數字 , 字串引號和註釋字元 。 每個角色都可以有零個或多個這些屬性。
        StreamTokenizer st = new StreamTokenizer(sr);
        int count = 0;
        // ttype 在讀取後的這個標記型別等於結尾的話就要一直迴圈讀
        while (st.ttype != StreamTokenizer.TT_EOF){
            try {
                //如果 讀了這個流裡面的內容的是一個單詞的話 就累加
                if (st.nextToken() == StreamTokenizer.TT_WORD){
                    count++;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("count="+count);
        sr.close();
    }



    public static void main(String[] args) {

        stringReader();
    }
}

 

 

 

&n