須要中文版《The Scheme Programming Language》的朋友能夠在此留言(內附一小段譯文)

  首先給出原著的連接:http://www.scheme.com/tspl4/緩存

  我正在持續翻譯這本書,大概天天都會翻譯兩小時。若我我的拿不許的地方,我會附上原文,防止誤導;還有些不適合翻譯的術語,我會特地不翻譯。編碼

  想看翻譯的人,能夠在下面留言。發這篇博文,就是爲了看看有多少人須要,個人翻譯有沒有公開的價值。spa

  若真有人須要,我能夠把翻譯不斷分享給你們~操作系統


  在此先給出一小段譯文,分享給你們。翻譯

  本段譯文只在排版上於原著每段中加了些換行,別的均與原著保持了一致。指針


Chapter 7. 輸入和輸出 code

  全部的輸入和輸出操做都經由 端口 執行。
  端口就是(多是無限大的)數據流的指針,這數據常爲一個文件。
  流是一個通路,可供程序存取字節或字符。
  端口類型有:輸入端口、輸出端口、雙向端口。對象

  端口是一等對象,和Scheme中的其餘對象同樣。
  端口沒有供打印的表示方法(原文是have a printed representation)。
  有三個內置的端口:通用輸入端口、通用輸出端口、通用錯誤端口,
  分別鏈接到進程的:標準輸入、標準輸出、標準錯誤流。
  語言自己提供了不少種打開新的端口的方法。進程

  輸入端口每每指向有限的流,例如存儲在硬盤上的輸入文件。
  若是一個輸入操做(例如:get-u8get-charget-datum)從一個已達有限流末尾的端口讀取,
  則會返回一個特殊的 eof (end of file) 對象
  謂詞 eof-object? 能夠用來判斷輸入操做的返回值是不是eof對象。utf-8

  端口類型有binarytextual
  binary端口容許程序於流中讀寫8-bit無符號字節、"octets,"。
  textual端口容許程序讀寫字符。

  不少時候,流被組織成字節序列, 但這些字節實際上是字符的編碼。
  此時,能夠藉助transcoder建立textual端口,從而在輸入時將字節解碼成字符、在輸出時將字符編碼成字節。
  transcoder內封裝了codec,它肯定了字符如何表示成字節。
  有三個標準的codec:latin-1 codec, Unicode utf-8 codec, Unicode utf-16 codec。
  在 latin-1 中,每一個字符用一個字節表示。
  在 utf-8 中,每一個字符用一到四個字節表示。
  在 utf-16 中,每一個字符用兩個或四個字節表示。

  transcoder內還封裝了eol style,用來肯定 識別哪一種 以及 如何識別 行尾標誌。
  若是 eol style 是 none,那麼不識別任何一種行尾標誌。
  另外六個標準 eol styles 以下所示:

lf line-feed 換行字符
cr carriage-return 回車字符
nel Unicode next-line C-n字符
ls Unicode line-separator 行分割字符
crlf 換行字符+回車字符
crnel C-n字符+回車字符

  不一樣的 eol style 下,輸入輸出操做也會不一樣。
  輸入時,除 none 以外的全部 eol style 下,均會將 各類行尾標誌 轉換爲 單換行字符。
  輸出時,除 none 以外的全部 eol style 下,均會將 換行字符 轉換爲 各自風格的行尾標誌。
  在輸入方向,除 none 以外的全部 eol style 都是等價的;
  而在輸出方向,則只有 none 和 lf 是等價的。

  除了 codec 和 eol style,transcoder內只還封裝了一塊信息:error-handling模式, 肯定了當編碼解碼錯誤出現時,會如何處理。
  例如,在輸入方向上,用封裝的 codec 沒法將一個字節序列轉換成字符;
  或者,在輸出方向上,用封裝的 codec 沒法將一個字符轉換成字節序列。
  error-handling模式有:ignoreraisereplace
  在 ignore 模式下,出錯的字節序列或字符會被忽略。
  在 raise 模式下,會拋出一個異常,類型是:i/o-decoding 或 i/o-encoding
  在輸入方向,端口定位到字節序列以後。
  在 replace 模式下,會產生一個替換的字符或字符編碼:
  在輸入方向,替換字符是 U+FFFD,
  而在輸出方向,替換字符則以下:
  當 codec 爲 utf-8 或 utf-16 時,替換字符是 U+FFFD;
  當 codec 爲 latin-1 時,替換字符則是 問號字符 ( ? )。

  爲了效率,端口會有緩存機制, 從而消除向操做系統逐字節或字符取用的開銷。
  標準的buffer模式有三個:blocklinenone
  在block模式下,將輸入輸出流分紅不少塊分別操做,每塊流的大小與實現相關。
  在line模式下,緩存將構建成一行一行的,或者是實現相關的大小。
  上面這兩種模式,僅在 textual輸出端口 中有明顯區別;
  由於 binary端口 中並不分行,而 輸入 則每每在流開始可讀時便直接讀取了。
  在none模式下,沒有緩存,所以會直接輸出到流中,也僅在須要時纔去輸入。

  本章餘下的內容有:
  transcoder上的操做、
  文件端口、標準端口、字符串和字節向量端口、自定義端口(custom ports)、
  通用端口操做、輸入操做、輸出操做、
  方便的輸入輸出、文件系統操做、字節向量和字符串的相互轉換。

相關文章
相關標籤/搜索