@@ -522,14 +522,13 @@ I/O Base Classes
522
522
It inherits from:class: `IOBase `.
523
523
524
524
The main difference with:class: `RawIOBase ` is that methods:meth: `read `,
525
- :meth: `readinto ` and:meth: `write ` will try (respectively) to read as much
526
- input as requested or to consume all given output, at the expense of
527
- making perhaps more than one system call.
525
+ :meth: `readinto ` and:meth: `write ` will try (respectively) to read
526
+ as much input as requested or to emit all provided data.
528
527
529
- In addition,those methods can raise :exc: ` BlockingIOError ` if the
530
- underlying raw stream is in non-blocking mode and cannot take or give
531
- enough data; unlike their :class: ` RawIOBase ` counterparts, they will
532
- never return ``None ``.
528
+ In addition,if the underlying raw stream is in non-blocking mode, when the
529
+ system returns would block :meth: ` write ` will raise :exc: ` BlockingIOError `
530
+ with :attr: ` BlockingIOError.characters_written ` and :meth: ` read ` will return
531
+ data read so far or ``None `` if no data is available .
533
532
534
533
Besides, the:meth: `read ` method does not have a default
535
534
implementation that defers to:meth: `readinto `.
@@ -562,29 +561,40 @@ I/O Base Classes
562
561
563
562
..method ::read(size=-1, /)
564
563
565
- Read and return up to *size * bytes. If the argument is omitted, ``None ``,
566
- or negative, data is read and returned until EOF is reached. An empty
567
- :class: `bytes ` object is returned if the stream is already at EOF.
564
+ Read and return up to *size * bytes. If the argument is omitted, ``None ``,
565
+ or negative read as much as possible.
568
566
569
- If the argument is positive, and the underlying raw stream is not
570
- interactive, multiple raw reads may be issued to satisfy the byte count
571
- (unless EOF is reached first). But for interactive raw streams, at most
572
- one raw read will be issued, anda short result does not imply that EOF is
573
- imminent.
567
+ Fewer bytes may be returned than requested. An empty :class: ` bytes ` object
568
+ is returned if the stream is already at EOF. More than one read may be
569
+ made and calls may be retried if specific errors are encountered, see
570
+ :meth: ` os. read` and:pep: ` 475 ` for more details. Less than size bytes
571
+ being returned does not imply that EOF is imminent.
574
572
575
- A:exc: `BlockingIOError ` is raised if the underlying raw stream is in
576
- non blocking-mode, and has no data available at the moment.
573
+ When reading as much as possible the default implementation will use
574
+ ``raw.readall `` if available (which should implement
575
+ :meth: `RawIOBase.readall `), otherwise will read in a loop until read
576
+ returns ``None ``, an empty:class: `bytes `, or a non-retryable error. For
577
+ most streams this is to EOF, but for non-blocking streams more data may
578
+ become available.
579
+
580
+ ..note ::
581
+
582
+ When the underlying raw stream is non-blocking, implementations may
583
+ either raise:exc: `BlockingIOError ` or return ``None `` if no data is
584
+ available.:mod: `io ` implementations return ``None ``.
577
585
578
586
..method ::read1(size=-1, /)
579
587
580
- Read and return up to *size * bytes, with at most one call to the
581
- underlying raw stream's:meth: `~RawIOBase.read ` (or
582
- :meth: `~RawIOBase.readinto `) method. This can be useful if you are
583
- implementing your own buffering on top of a:class: `BufferedIOBase `
584
- object.
588
+ Read and return up to *size * bytes, calling:meth: `~RawIOBase.readinto `
589
+ which may retry if:py:const: `~errno.EINTR ` is encountered per
590
+ :pep: `475 `. If *size * is ``-1 `` or not provided, the implementation will
591
+ choose an arbitrary value for *size *.
592
+
593
+ ..note ::
585
594
586
- If *size * is ``-1 `` (the default), an arbitrary number of bytes are
587
- returned (more than zero unless EOF is reached).
595
+ When the underlying raw stream is non-blocking, implementations may
596
+ either raise:exc: `BlockingIOError ` or return ``None `` if no data is
597
+ available.:mod: `io ` implementations return ``None ``.
588
598
589
599
..method ::readinto(b, /)
590
600
@@ -761,20 +771,17 @@ than raw I/O does.
761
771
762
772
..method ::peek(size=0, /)
763
773
764
- Return bytes from the stream without advancing the position. At most one
765
- single read on the raw stream is done to satisfy thecall. The number of
766
- bytes returned may be less or more than requested .
774
+ Return bytes from the stream without advancing the position.The number of
775
+ bytes returned may be less or more than requested. If theunderlying raw
776
+ stream is non-blocking and the operation would block, returns empty bytes .
767
777
768
778
..method ::read(size=-1, /)
769
779
770
- Read and return *size * bytes, or if *size * is not given or negative, until
771
- EOF or if the read call would block in non-blocking mode.
780
+ In:class: `BufferedReader ` this is the same as:meth: `io.BufferedIOBase.read `
772
781
773
782
..method ::read1(size=-1, /)
774
783
775
- Read and return up to *size * bytes with only one call on the raw stream.
776
- If at least one byte is buffered, only buffered bytes are returned.
777
- Otherwise, one raw stream read call is made.
784
+ In:class: `BufferedReader ` this is the same as:meth: `io.BufferedIOBase.read1 `
778
785
779
786
..versionchanged ::3.7
780
787
The *size * argument is now optional.
@@ -811,8 +818,8 @@ than raw I/O does.
811
818
812
819
Write the:term: `bytes-like object `, *b *, and return the
813
820
number of bytes written. When in non-blocking mode, a
814
- :exc: `BlockingIOError `is raised if the buffer needs to be written out but
815
- the raw stream blocks.
821
+ :exc: `BlockingIOError `with :attr: ` BlockingIOError.characters_written ` set
822
+ is raised if the buffer needs to be written out but the raw stream blocks.
816
823
817
824
818
825
..class ::BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE)