On Tuesday, 3 March 2015 19:29:19 UTC, Serhiy Storchaka  wrote:
> On 03.03.15 18:07, Paul Moore wrote:
> > Is it possible to say to a BufferedReader stream "give me all the bytes you 
> > have available in the buffer, or do one OS call and give me everything you 
> > get back"? The problem is that the "number of bytes" argument to read1() 
> > isn't optional, so I can't do available_bytes = fd.read1().
> 
> Just specify large size.

Thanks. Looking at the source, it appears that a large size will allocate a 
buffer that size for the data even if the amount actually read is small 
(thinking about it, of couse it has to, doh, because the syscall needs it).

Anyway, it's a pretty microscopic risk in practice, and when I looked at them, 
the incremental codecs (codecs.iterdecode) really aren't that hard to use, so I 
can do it that way if it matters enough.

For what it's worth, in case anyone wants to know, incremental decoding looks 
like this:

def get():
    while True:
        data = process.stdout.read(1000)
        if not data:
            break
        yield data
for data in codecs.iterdecode(get(), encoding):
    sys.stdout.write(data)
    sys.stdout.flush()

Thanks.
Paul
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to