github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/bufio/bufio.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package bufio はバッファードI/Oを実装しています。io.Readerまたはio.Writerオブジェクトをラップして、 6 // バッファリングやテキストI/Oのための支援を提供する別のオブジェクト(ReaderまたはWriter)を作成します。 7 package bufio 8 9 import ( 10 "github.com/shogo82148/std/errors" 11 "github.com/shogo82148/std/io" 12 ) 13 14 var ( 15 ErrInvalidUnreadByte = errors.New("bufio: invalid use of UnreadByte") 16 ErrInvalidUnreadRune = errors.New("bufio: invalid use of UnreadRune") 17 ErrBufferFull = errors.New("bufio: buffer full") 18 ErrNegativeCount = errors.New("bufio: negative count") 19 ) 20 21 // Readerはio.Readerオブジェクトに対してバッファリングを実装します。 22 type Reader struct { 23 buf []byte 24 rd io.Reader 25 r, w int 26 err error 27 lastByte int 28 lastRuneSize int 29 } 30 31 // NewReaderSizeは、バッファの最低限のサイズが指定された新しい [Reader] を返します。 32 // もし引数のio.Readerが既に十分なサイズの [Reader] であれば、それは基本となる [Reader] を返します。 33 func NewReaderSize(rd io.Reader, size int) *Reader 34 35 // NewReaderはデフォルトサイズのバッファを持つ新しい [Reader] を返します。 36 func NewReader(rd io.Reader) *Reader 37 38 // Sizeはバイト単位での基礎バッファのサイズを返します。 39 func (b *Reader) Size() int 40 41 // Resetはバッファに保持されたデータを破棄し、すべての状態をリセットし、 42 // バッファリーダーをrから読み取るように切り替えます。 43 // [Reader] のゼロ値に対してResetを呼び出すと、内部バッファがデフォルトのサイズに初期化されます。 44 // b.Reset(b)(つまり、[Reader] を自身にリセットする)は何もしません。 45 func (b *Reader) Reset(r io.Reader) 46 47 // Peek returns the next n bytes without advancing the reader. The bytes stop 48 // being valid at the next read call. If Peek returns fewer than n bytes, it 49 // also returns an error explaining why the read is short. The error is 50 // [ErrBufferFull] if n is larger than b's buffer size. 51 // 52 // Calling Peek prevents a [Reader.UnreadByte] or [Reader.UnreadRune] call from succeeding 53 // until the next read operation. 54 func (b *Reader) Peek(n int) ([]byte, error) 55 56 // Discard は次の n バイトをスキップし、スキップしたバイト数を返します。 57 // 58 // もし Discard が n バイト未満をスキップした場合、エラーも返します。 59 // もし 0 <= n <= b.Buffered() のとき、Discard は io.Reader の下の方から読み取らずに必ず成功することが保証されています。 60 func (b *Reader) Discard(n int) (discarded int, err error) 61 62 // Readはデータをpに読み込みます。 63 // pに読み込まれたバイト数を返します。 64 // バイトは基礎となる [Reader] のReadから最大1つ取り出されますので、nはlen(p)より少ない場合があります。 65 // len(p)バイトを正確に読み取るには、io.ReadFull(b, p)を使用してください。 66 // 基礎となる [Reader] がio.EOFで非ゼロの数を返す可能性がある場合、このReadメソッドも同様です。詳細は [io.Reader] ドキュメントを参照してください。 67 func (b *Reader) Read(p []byte) (n int, err error) 68 69 // ReadByteは1バイトを読み取って返します。 70 // バイトが利用できない場合、エラーを返します。 71 func (b *Reader) ReadByte() (byte, error) 72 73 // UnreadByteは最後のバイトを未読状態に戻します。直前に読み込まれたバイトのみが未読状態に戻すことができます。 74 // 75 // UnreadByteは、[Reader] に対して最後に呼び出されたメソッドが読み込み操作ではない場合にエラーを返します。特に、 [Reader.Peek] 、 [Reader.Discard] 、および [Reader.WriteTo] は読み込み操作とはみなされません。 76 func (b *Reader) UnreadByte() error 77 78 // ReadRuneは、1つのUTF-8エンコードされたユニコード文字を読み込み、 79 // そのルーンとバイトサイズを返します。エンコードされたルーンが無効な場合は、1バイトを消費し、 80 // サイズが1のunicode.ReplacementChar(U+FFFD)を返します。 81 func (b *Reader) ReadRune() (r rune, size int, err error) 82 83 // UnreadRuneは最後のルーンを戻します。もし、 [Reader] に最も最近呼び出されたメソッドが [Reader.ReadRune] でない場合、 [Reader.UnreadRune] はエラーを返します。(この点で、 [Reader.UnreadByte] よりも厳格です。[Reader.UnreadByte] はどの読み取り操作からも最後のバイトを戻します。) 84 func (b *Reader) UnreadRune() error 85 86 // Bufferedは現在のバッファから読み取ることができるバイト数を返します。 87 func (b *Reader) Buffered() int 88 89 // ReadSliceは入力内の最初のデリミタの出現まで読み取り、バッファ内のバイトを指すスライスを返します。 90 // バイトは次の読み取り時には無効になります。 91 // ReadSliceがデリミタを見つける前にエラーに遭遇した場合、バッファ内のすべてのデータとエラー自体(通常はio.EOF)を返します。 92 // バッファがデリミタなしで満杯になると、ReadSliceは [ErrBufferFull] エラーで失敗します。 93 // ReadSliceから返されるデータは次のI/O操作によって上書きされるため、ほとんどのクライアントは 94 // [Reader.ReadBytes] またはReadStringを代わりに使用すべきです。 95 // ReadSliceは、lineの終了がデリミタでない場合にのみerr!= nilを返します。 96 func (b *Reader) ReadSlice(delim byte) (line []byte, err error) 97 98 // ReadLineは低レベルの行読み取りプリミティブです。ほとんどの呼び出し元は、 [Reader.ReadBytes]('\n') または [Reader.ReadString]('\n') を使用するか、 [Scanner] を使用する必要があります。 99 // 100 // ReadLineは、改行文字を含まない1行だけを返そうとします。もし行がバッファーに対して長すぎる場合、isPrefixが設定され、行の先頭が返されます。それ以降の行は、将来の呼び出しで返されます。最後のフラグメントを返す際には、isPrefixはfalseになります。返されるバッファーは、次のReadLine呼び出しまでの間のみ有効です。ReadLineは、nilではない行を返すか、エラーを返すか、どちらかを返しますが、両方を返すことはありません。 101 // 102 // ReadLineから返されるテキストには、行末の("\r\n"または"\n")は含まれません。入力が最後の行末で終わっている場合、特定の表示やエラーは与えられません。ReadLineの後に [Reader.UnreadByte] を呼び出すと、常に最後に読み取られたバイト(おそらく行末に属する文字)がアンリードされます。ただし、そのバイトがReadLineによって返された行の一部でない場合でもです。 103 func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error) 104 105 // ReadBytesは入力内のデリミタの最初の出現まで読み取り、 106 // データとデリミタを含むスライスを返します。 107 // ReadBytesがデリミタを見つける前にエラーが発生した場合、 108 // エラーが発生する前に読み取られたデータとエラー自体(通常はio.EOF)を返します。 109 // Returned dataがデリミタで終わっていない場合、ReadBytesはerr != nilを返します。 110 // 簡単な使用のためには、Scannerがより便利です。 111 func (b *Reader) ReadBytes(delim byte) ([]byte, error) 112 113 // ReadStringは、入力内で最初のデリミタが現れるまで読み込み、デリミタを含むデータの文字列を返します。 114 // ReadStringがデリミタを見つける前にエラーに遭遇した場合、エラー自体(通常はio.EOF)とエラーが発生する前に読み取ったデータを返します。 115 // ReadStringは、返されたデータの最後がデリミタで終わっていない場合、err != nilを返します。 116 // 単純な使用法の場合は、Scannerがより便利です。 117 func (b *Reader) ReadString(delim byte) (string, error) 118 119 // WriteToはio.WriterToを実装します。 120 // これは基礎となる [Reader] の [Reader.Read] メソッドを複数回呼び出すことがあります。 121 // 基礎となるreaderが [Reader.WriteTo] メソッドをサポートしている場合、 122 // これはバッファリングせずに基礎となる [Reader.WriteTo] を呼び出します。 123 func (b *Reader) WriteTo(w io.Writer) (n int64, err error) 124 125 // Writerは [io.Writer] オブジェクトに対してバッファリングを行います。 126 // [Writer] に書き込む際にエラーが発生した場合、以降のデータの受け入れや、 [Writer.Flush] メソッドの呼び出しはエラーを返します。 127 // 全てのデータが書き込まれた後、クライアントは [Writer.Flush] メソッドを呼び出して、全てのデータが基になる [io.Writer] に転送されることを保証する必要があります。 128 type Writer struct { 129 err error 130 buf []byte 131 n int 132 wr io.Writer 133 } 134 135 // NewWriterSizeは、バッファのサイズが指定された最小値を持つ新しい [Writer] を返します。 136 // 引数のio.Writerがすでに十分な大きさを持つ [Writer] である場合、基になる [Writer] を返します。 137 func NewWriterSize(w io.Writer, size int) *Writer 138 139 // NewWriterは、バッファのデフォルトサイズを持つ新しい [Writer] を返します。 140 // 引数のio.Writerが既に十分に大きなバッファサイズを持つ [Writer] である場合、基になる [Writer] を返します。 141 func NewWriter(w io.Writer) *Writer 142 143 // Sizeはバイト単位で下層のバッファーのサイズを返します。 144 func (b *Writer) Size() int 145 146 // Resetは、フラッシュされていないバッファデータを破棄し、エラーをクリアし、出力をwにリセットします。 147 // [Writer] のゼロ値に対してResetを呼び出すと、内部バッファがデフォルトのサイズに初期化されます。 148 // w.Reset(w)(つまり、[Writer] を自身にリセットすること)は何もしません。 149 func (b *Writer) Reset(w io.Writer) 150 151 // Flushはバッファされたデータを基になる [io.Writer] に書き込みます。 152 func (b *Writer) Flush() error 153 154 // Available はバッファ内で未使用のバイト数を返します。 155 func (b *Writer) Available() int 156 157 // AvailableBufferは、b.Available() 容量の空のバッファを返します。 158 // このバッファは追加されることを意図しており、 159 // 直後の [Writer.Write] 呼び出しに渡されます。 160 // このバッファは、b上の次の書き込み操作までの間のみ有効です。 161 func (b *Writer) AvailableBuffer() []byte 162 163 // Bufferedは現在のバッファに書き込まれたバイト数を返します。 164 func (b *Writer) Buffered() int 165 166 // Write は p の内容をバッファに書き込みます。 167 // 書き込まれたバイト数を返します。 168 // nn < len(p) の場合、短い書き込みの理由を説明するエラーも返ります。 169 func (b *Writer) Write(p []byte) (nn int, err error) 170 171 // WriteByteは1バイトを書き込みます。 172 func (b *Writer) WriteByte(c byte) error 173 174 // WriteRuneは一つのUnicodeコードポイントを書き込み、書き込んだバイト数とエラーを返します。 175 func (b *Writer) WriteRune(r rune) (size int, err error) 176 177 // WriteString関数は文字列を書き込みます。 178 // 書き込んだバイト数を返します。 179 // もし書き込んだバイト数がsの長さよりも少ない場合、短い書き込みである理由を説明するエラーも返されます。 180 func (b *Writer) WriteString(s string) (int, error) 181 182 // ReadFrom は [io.ReaderFrom] インターフェースを実装します。もし基礎となる書き込み先が ReadFrom メソッドをサポートしている場合、これは基礎となる ReadFrom を呼び出します。 183 // バッファされたデータと基礎となる ReadFrom がある場合、これはバッファを埋めてから ReadFrom を呼び出します。 184 func (b *Writer) ReadFrom(r io.Reader) (n int64, err error) 185 186 // ReadWriterは [Reader] と [Writer] へのポインタを保存します。 187 // [io.ReadWriter] を実装します。 188 type ReadWriter struct { 189 *Reader 190 *Writer 191 } 192 193 // NewReadWriterはrとwにディスパッチする新しい [ReadWriter] を割り当てます。 194 func NewReadWriter(r *Reader, w *Writer) *ReadWriter