Could you please send a new email on this list with the source attached as a
text file?

> On 23 Oct 2016, at 19:14, Brunoais <brunoa...@gmail.com> wrote:
> 
> Here's my poc/prototype:
> http://pastebin.com/WRpYWDJF
> 
> I've implemented the bare minimum of the class that follows the same contract 
> of BufferedReader while signaling all issues I think it may have or has in 
> comments.
> I also wrote some javadoc to help guiding through the class.
> 
> I could have used more fields from BufferedReader but the names were so 
> minimalistic that were confusing me. I intent to change them before sending 
> this to openJDK.
> 
> One of the major problems this has is long overflowing. It is major because 
> it is hidden, it will be extremely rare and it takes a really long time to 
> reproduce. There are different ways of dealing with it. From just documenting 
> to actually making code that works with it.
> 
> I built a simple test code for it to have some ideas about performance and 
> correctness.
> 
> http://pastebin.com/eh6LFgwT
> 
> This doesn't do a through test if it is actually working correctly but I see 
> no reason for it not working correctly after fixing the 2 bugs that test 
> found.
> 
> I'll also leave here some conclusions about speed and resource consumption I 
> found.
> 
> I made tests with default buffer sizes, 5000B  15_000B and 500_000B. I 
> noticed that, with my hardware, with the 1 530 000 000B file, I was getting 
> around:
> 
> In all buffers and fake work: 10~15s speed improvement ( from 90% HDD speed 
> to 100% HDD speed)
> In all buffers and no fake work: 1~2s speed improvement ( from 90% HDD speed 
> to 100% HDD speed)
> 
> Changing the buffer size was giving different reading speeds but both were 
> quite equal in how much they would change when changing the buffer size.
> Finally, I could always confirm that I/O was always the slowest thing while 
> this code was running.
> 
> For the ones wondering about the file size; it is both to avoid OS cache and 
> to make the reading at the main use-case these objects are for (large streams 
> of bytes).
> 
> @Pavel, are you open for discussion now ;)? Need anything else?
> 
> On 21/10/2016 19:21, Pavel Rappo wrote:
>> Just to append to my previous email. BufferedReader wraps any Reader out 
>> there.
>> Not specifically FileReader. While you're talking about the case of effective
>> reading from a file.
>> 
>> I guess there's one existing possibility to provide exactly what you need 
>> (as I
>> understand it) under this method:
>> 
>> /**
>>  * Opens a file for reading, returning a {@code BufferedReader} to read text
>>  * from the file in an efficient manner...
>>    ...
>>  */
>> java.nio.file.Files#newBufferedReader(java.nio.file.Path)
>> 
>> It can return _anything_ as long as it is a BufferedReader. We can do it, 
>> but it
>> needs to be investigated not only for your favorite OS but for other OSes as
>> well. Feel free to prototype this and we can discuss it on the list later.
>> 
>> Thanks,
>> -Pavel
>> 
>>> On 21 Oct 2016, at 18:56, Brunoais <brunoa...@gmail.com> wrote:
>>> 
>>> Pavel is right.
>>> 
>>> In reality, I was expecting such BufferedReader to use only a single buffer 
>>> and have that Buffer being filled asynchronously, not in a different Thread.
>>> Additionally, I don't have the intention of having a larger buffer than 
>>> before unless stated through the API (the constructor).
>>> 
>>> In my idea, internally, it is supposed to use 
>>> java.nio.channels.AsynchronousFileChannel or equivalent.
>>> 
>>> It does not prevent having two buffers and I do not intent to change 
>>> BufferedReader itself. I'd do an BufferedAsyncReader of sorts (any name 
>>> suggestion is welcome as I'm an awful namer).
>>> 
>>> 
>>> On 21/10/2016 18:38, Roger Riggs wrote:
>>>> Hi Pavel,
>>>> 
>>>> I think Brunoais asking for a double buffering scheme in which the 
>>>> implementation of
>>>> BufferReader fills (a second buffer) in parallel with the application 
>>>> reading from the 1st buffer
>>>> and managing the swaps and async reads transparently.
>>>> It would not change the API but would change the interactions between the 
>>>> buffered reader
>>>> and the underlying stream.  It would also increase memory requirements and 
>>>> processing
>>>> by introducing or using a separate thread and the necessary 
>>>> synchronization.
>>>> 
>>>> Though I think the formal interface semantics could be maintained, I have 
>>>> doubts
>>>> about compatibility and its unintended consequences on existing subclasses,
>>>> applications and libraries.
>>>> 
>>>> $.02, Roger
>>>> 
>>>> On 10/21/16 1:22 PM, Pavel Rappo wrote:
>>>>> Off the top of my head, I would say it's not possible to change the 
>>>>> design of an
>>>>> _extensible_ type that has been out there for 20 or so years. All these 
>>>>> I/O
>>>>> streams from java.io were designed for simple synchronous use case.
>>>>> 
>>>>> It's not that their design is flawed in some way, it's that they doesn't 
>>>>> seem to
>>>>> suit your needs. Have you considered using 
>>>>> java.nio.channels.AsynchronousFileChannel
>>>>> in your applications?
>>>>> 
>>>>> -Pavel
>>>>> 
>>>>>> On 21 Oct 2016, at 17:08, Brunoais <brunoa...@gmail.com> wrote:
>>>>>> 
>>>>>> Any feedback on this? I'm really interested in implementing such 
>>>>>> BufferedReader/BufferedStreamReader to allow speeding up my applications 
>>>>>> without having to think in an asynchronous way or multi-threading while 
>>>>>> programming with it.
>>>>>> 
>>>>>> That's why I'm asking this here.
>>>>>> 
>>>>>> 
>>>>>> On 13/10/2016 14:45, Brunoais wrote:
>>>>>>> Hi,
>>>>>>> 
>>>>>>> I looked at BufferedReader source code for java 9 long with the source 
>>>>>>> code of the channels/streams used. I noticed that, like in java 7, 
>>>>>>> BufferedReader does not use an Async API to load data from files, 
>>>>>>> instead, the data loading is all done synchronously even when the OS 
>>>>>>> allows requesting a file to be read and getting a warning later when 
>>>>>>> the file is effectively read.
>>>>>>> 
>>>>>>> Why Is BufferedReader not async while providing a sync API?
>>>>>>> 
>>>> 
>> 
> 

Reply via email to