"流"派家族,一脈相承

来源:http://www.cnblogs.com/mesopotamia/archive/2016/09/30/5925147.html
-Advertisement-
Play Games

(更多內容請關註本人微信訂閱號:it_pupil) 你沒進錯,我們講的是Java的輸入輸出流。 概述 ➤ 可以從其中讀入一個位元組序列的對象稱作輸入流。(輸入流是一個對象,可以從這個對象中讀取一個位元組序列。) ➤ 可以向其中寫入一個位元組序列的對象稱作輸出流。 ➤ 讀入或者寫入的位元組序列當然有個來源地和 ...


(更多內容請關註本人微信訂閱號:it_pupil)

你沒進錯,我們講的是Java的輸入輸出流。

概述

➤   可以從其中讀入一個位元組序列的對象稱作輸入流。(輸入流是一個對象,可以從這個對象中讀取一個位元組序列。)

➤    可以向其中寫入一個位元組序列的對象稱作輸出流。

➤    讀入或者寫入的位元組序列當然有個來源地和目的地(輸入流從哪裡讀取位元組序列的,輸入流把位元組序列寫入到哪裡去?),這個來源地和目的地可以是文件(通常)、網路鏈接,記憶體塊等。

➤    抽象類InputStream和OutputStream是輸入輸出流層次結構的基礎(祖宗)。


➤    從上面看出,輸入輸出流以位元組為單位,那麼,它們就不方便處理以Unicode形式存儲的信息(用兩個位元組來編碼一個字元。),所以,從抽象類Reader和Writer中又繼承出來一個層次架構,專門處理這種Unicode字元。這些類的讀入與寫出是基於兩位元組碼元的,而不是單位元組字元。

 

讀寫位元組

➤    InputStream只有一個抽象的讀方法:abstract int read();

➤    設計具體的輸入流,必須覆蓋read()方法。比如:FileInputStream覆蓋read()增加了功能:從文件中讀位元組。

➤    InputStream還有若幹個非抽象的方法,比如,讀入一個位元組數組啊,跳過大量的位元組再開始讀入啊等,而這些方法都調用了抽象的read()方法,所以,各個子類只需要覆蓋read()方法。

➤    與InputSDtream類似,OutputStream定義了抽象寫方法:abstract void write(int b);

➤    完成讀寫後,要調用close方法關閉流,釋放資源。

➤    read和write方法操作時都將被阻塞(線程安全),直至位元組確實被讀入或者寫出,可以用available方法事先檢查可讀入的位元組數量。

➤    close在關閉流的同時,還會把輸出緩衝區的字元全部全部強制推出去。如果不關閉,那麼緩衝區的最後留下的數據可能永遠不會傳送出去了。

➤    可以用flush()方法強制把緩衝區的數據沖刷出去。

 

完整的流家族

➤    讀寫單個位元組或位元組數組:InputStream和OutputStream。

➤    讀寫字元串和數字:擴展InputStream和OutputStream,生成豐富的子類,如:

         DataInputStream和DataOutputStream:以二進位格式讀寫所有的Java基本類型。

       ZipInputStream,ZipOutputStream:讀寫Zip文件。

➤    上面不論是祖宗還是子孫,均以位元組或者位元組數組為讀取目標。讀取Unicode文本呢(以雙位元組為碼元):使用Reader和Writer的子類。

 

組合流過濾器

➤    FileInputStream可以按位元組讀取文件中的數據,但是沒法讀取數值類型。

➤   DataInputStream可以讀入數值類型(readDouble()等),但是它不能從文件中讀取數據啊。

➤    那麼我現在想從文件中讀入數字,怎麼破?那就套一層:


➤    我不但要從文件中讀入數字,我還要在讀取過程中利用緩衝區緩存數據,怎麼破?那就繼續套:


➤    上面的一層套一層的方式,其實是Java經典的設計模式:裝飾者模式的應用:

 


 

原文鏈接:

http://mp.weixin.qq.com/s?__biz=MzIyNzUzNjQ3MA==&mid=2247483849&idx=1&sn=656bf330b2851fa301efcff257a1222f&scene=21#wechat_redirect


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 規則,相同則為假,不同則為真 1 ^ 1 = 0 1 ^ 0 = 1 以下為測試腳本。例子1是判斷一個數組所有的元素是否一致,例子2是異或做簡單加密的方法。 ...
  • 下邊講述Hibernate多對多關係映射。 多對多關係的表的結構為: 兩個實體表,還包含一個關係表,關係表為複合主鍵,如果要使用Hibernate多對多關係映射,則關係表必須只包含兩個欄位,如果生成了Hibernate多對多關係映射,則中間關係表不會生成實體(即沒有對應的pojo類,更沒有其映射文件 ...
  • 1、使用while迴圈輸出 1 2 3 4 5 6 8 9 10 #/usr/bin/env python# -*- coding: utf-8 -*-s = 1while s < 11: if s != 7: print(s) s += 1 2、求1-100的所有數的和 #/usr/bin/env ...
  • 1. Comparator 和 Comparable 相同的地方他們都是java的一個介面, 並且是用來對自定義的class比較大小的,什麼是自定義class: 如 public class Person{ String name; int age }.當我們有這麼一個personList,裡面包含 ...
  • 物理地址 堆的物理地址分配對對象是不連續的。因此性能慢些。在GC的時候也要考慮到不連續的分配,所以有各種演算法。比如,標記 消除,複製,標記 壓縮,分代(即新生代使用複製演算法,老年代使用標記——壓縮) 棧使用的是數據結構中的棧,先進後出的原則,物理地址分配是連續的。所以性能快。 記憶體分別 堆因為是不連 ...
  • 異常 異常(Exception)是因為程式的例外、違例、出錯等情況而在正常控制流以外採取的行為,一般分為如下兩個階段: 1.異常發生:一個錯誤發生後被列印出來,稱為未處理異常,而預設的處理則是自動輸出一些調試信息並終止程式運行。 2.異常處理:通過代碼明確地處理異常,則程式不會終止運行,並增強程式的... ...
  • package com.gdh.backtext;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry; public class BackText { String text; public BackTex ...
  • 函數重寫overwrite: 當子類提供了和父類同名的虛函數時,稱之為函數重寫,函數的返回值類 函數名 參數列表必須完全相同 名字隱藏namehide: 當子類提供了和父類同名的數據時 叫名字隱藏 函數重載: 同一個作用域中 函數名相同 參數列表不同的函數構成重載 多態 當父類型的指針(引用)指向子 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...