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