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

1、字符串流

定義:字符串流(StringReader),以一個字符爲數據源,來構造一個字符流。java

做用:在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();
    }
}

 

2、管道流 spa

管道輸入流:線程

PipedInputStream:
  • 管道輸入流應鏈接到管道輸出流; 管道輸入流而後提供寫入管道輸出流的任何數據字節。
  • 典型地,數據被從一個讀 PipedInputStream對象由一個線程而且數據被寫入到對應的 PipedOutputStream經過一些其它線程。
  • 不建議嘗試從單個線程使用這兩個對象,由於它可能會使線程死鎖。
  • 管道輸入流包含一個緩衝區,在讀取操做中將讀取操做與限制內的操做相分離的管道被認爲是 broken若是正在提供的數據字節到鏈接的管道輸出流中的線程再也不存活。

 

管道輸出流:code

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();
    }
}
相關文章
相關標籤/搜索