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