'Classes/System/IO/StreamReader.ab 'ToDo: コンソールで入力待ちになる問題への対処 Namespace System Namespace IO /* @brief ストリームから読み取りを行うTextReaderの実装。 @date 2008/02/25 @auther Egtra */ Class StreamReader Inherits TextReader Public /* @date 2008/02/25 @auther Egtra */ Sub StreamReader(path As String) init(New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) End Sub /* @date 2008/02/25 @auther Egtra */ Sub StreamReader(stream As Stream) init(stream) End Sub Public /* @brief 基になるストリームを取得する @date 2008/09/02 @auther NoWest */ Function BaseStream () As Stream Return s End Function Protected /* @date 2008/02/25 @auther Egtra */ Override Sub Dispose(disposing As Boolean) If disposing Then If Not ActiveBasic.IsNothing(s) Then s.Dispose(True) End If End If s = Nothing End Sub /* @date 2008/12/27 @auther Egtra */ Override Function Underflow() As Boolean Dim buf = Buffer Dim tmp = New Collections.Generic.List Underflow = decoder.Decode(tmp, s) 'ToDo: 非UNICODEのとき、 ' サロゲートペアや結合文字列 (Combining Character Sequence)の途中でバッファが途切れている場合に対応する Dim s = New String(tmp.Data, tmp.Count) buf.Append(s) End Function Private /* @date 2008/02/25 @auther Egtra */ Sub init(str As Stream) s = str decoder = New Text.Detail.WindowsCodePageDecoder(CP_ACP) End Sub s As Stream decoder As Text.Decoder End Class End Namespace End Namespace