groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gerald Wiltse <jerrywil...@gmail.com>
Subject Re: ServerSocket , Chunked data , and BufferedReader
Date Tue, 12 Apr 2016 18:56:04 GMT
For what it's worth, your blog, and your presentations have kept me very
motivated about learning Groovy. I still refer to them often. Also, I can
say the same about many of the contributors and people on this list as
well. I am grateful to all.

Gerald R. Wiltse
jerrywiltse@gmail.com


On Tue, Apr 12, 2016 at 2:14 PM, Guillaume Laforge <glaforge@gmail.com>
wrote:

> Ah ah, yes, it's been such a long time, and I've got such a huge backlog
> :-O
> I'd need to automate that process, because it's quite time consuming, and
> perhaps even gather a team of a handful of us to collaborate, collect and
> curate all those news items!
> Resurrecting has been on my long todo list for a while!
>
> Guillaume
>
> On Tue, Apr 12, 2016 at 7:59 PM, Gerald Wiltse <jerrywiltse@gmail.com>
> wrote:
>
>> Also, looking forward to a fresh post soon... will you have time to do
>> one?
>>
>> http://glaforge.appspot.com/
>>
>> Gerald R. Wiltse
>> jerrywiltse@gmail.com
>>
>>
>> On Tue, Apr 12, 2016 at 12:58 PM, Gerald Wiltse <jerrywiltse@gmail.com>
>> wrote:
>>
>>> Yes you are right about the readLine().  I remember now that my problem
>>> was actually that the inputStream created by withStreams has "readLines()"
>>> method but not a "readLine()" method. Then I could process each line
>>> directly from the intputStream wouldn't even need the reader.
>>>
>>> Gerald R. Wiltse
>>> jerrywiltse@gmail.com
>>>
>>>
>>> On Tue, Apr 12, 2016 at 12:40 PM, Guillaume Laforge <glaforge@gmail.com>
>>> wrote:
>>>
>>>> Oh and actually, when you do input.withReader { reader -> ... }
>>>> this is actually a BufferedReader that Groovy gives you.
>>>> So you can use BufferedReader's readLine() method!
>>>>
>>>> On Tue, Apr 12, 2016 at 6:39 PM, Guillaume Laforge <glaforge@gmail.com>
>>>> wrote:
>>>>
>>>>> Ah good point.
>>>>> Well, it's possible to break out of the eachLine call... by throwing
>>>>> an exception, although it makes the code a little less elegant obviously.
>>>>>
>>>>> On Tue, Apr 12, 2016 at 6:27 PM, Gerald Wiltse <jerrywiltse@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Thank you for the response!
>>>>>>
>>>>>> I had it that way when I started.  The problem with using
>>>>>> reader.eachLine{}  is there is no way to break out after a specific
number
>>>>>> of lines have been received (other than using a GroovyRuntimeException,
>>>>>> which is undesirable).
>>>>>>
>>>>>>        Ref:
>>>>>> http://stackoverflow.com/questions/9916261/groovy-inputstream-reading-closure-hanging
>>>>>> )
>>>>>>
>>>>>> I was sad to discover that there's an eachLine{} method,  but not
a
>>>>>> readLine() method on the reader.  In my case (and perhaps many others)
>>>>>> readLine() would cut out the need for the construction of the
>>>>>> BufferedReader and InputStreamReader.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Gerald R. Wiltse
>>>>>> jerrywiltse@gmail.com
>>>>>>
>>>>>>
>>>>>> On Tue, Apr 12, 2016 at 12:19 PM, Guillaume Laforge <
>>>>>> glaforge@gmail.com> wrote:
>>>>>>
>>>>>>> You can do an input.withReader { reader -> ... } to have a
buffered
>>>>>>> reader on the input stream.
>>>>>>> And with that reader, you can do reader.eachLine { String s ->
... }
>>>>>>> to iterate over all the lines.
>>>>>>> Last interesting nugget, there's also the class
>>>>>>> groovy.io.LineColumnReader potentially, if you're interested
in keeping
>>>>>>> track of the position (column and line number) in the file.
>>>>>>>
>>>>>>> Guillaume
>>>>>>>
>>>>>>> On Tue, Apr 12, 2016 at 5:53 PM, Gerald Wiltse <
>>>>>>> jerrywiltse@gmail.com> wrote:
>>>>>>>
>>>>>>>> I'm trying to use a "ServerSocket" to receive HTTP messages
from a
>>>>>>>> client which is POSTing them as chunked.  I just want to
capture the text
>>>>>>>> content being posted (plain text).  Any input on how to do
this better
>>>>>>>> would be welcomed.
>>>>>>>>
>>>>>>>> Here is my existing and very not-elegant solution.  When
dealing
>>>>>>>> with ServerSocket, one has to handle the headers and chunk
barriers
>>>>>>>> manually, and this is what I came up with.  I looked at filterline
method
>>>>>>>> on the reader, maybe that's part of a solution, i'm not sure.
>>>>>>>>
>>>>>>>>
>>>>>>>> socket.withStreams { input, output ->
>>>>>>>> BufferedReader reader = new BufferedReader(new
>>>>>>>> InputStreamReader(input))
>>>>>>>> while (currentLineCount < processor.newLineCount) {
>>>>>>>> line = reader.readLine()
>>>>>>>>
>>>>>>>> if (line && line.size() > 3) {
>>>>>>>> processor.processFormats(line)
>>>>>>>> }
>>>>>>>> currentLineCount++
>>>>>>>> }
>>>>>>>> }
>>>>>>>>
>>>>>>>>
>>>>>>>> Caveats:
>>>>>>>>
>>>>>>>> 1.  I have been trying to process line by line to minimize
memory
>>>>>>>> impact, rather than buffering the whole collection. I'd like
to keep it
>>>>>>>> that way.
>>>>>>>>
>>>>>>>>
>>>>>>>> 2.  These 4 Jetty libraries are available on the classpath,
so I
>>>>>>>> could leverage them, but can't add other libraries.
>>>>>>>>
>>>>>>>>     compile 'org.eclipse.jetty:jetty-server:8.1.2.v20120308'
>>>>>>>>     compile 'org.eclipse.jetty:jetty-continuation:8.1.2.v20120308'
>>>>>>>>     compile 'org.eclipse.jetty:jetty-io:8.1.2.v20120308'
>>>>>>>>     compile 'org.eclipse.jetty:jetty-util:8.1.2.v20120308'
>>>>>>>>
>>>>>>>> I would make the Service and Handler in Jetty, but I can't
find any
>>>>>>>> good examples that fit my situation.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Gerald R. Wiltse
>>>>>>>> jerrywiltse@gmail.com
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Guillaume Laforge
>>>>>>> Apache Groovy committer & PMC Vice-President
>>>>>>> Product Ninja & Advocate at Restlet <http://restlet.com>
>>>>>>>
>>>>>>> Blog: http://glaforge.appspot.com/
>>>>>>> Social: @glaforge <http://twitter.com/glaforge> / Google+
>>>>>>> <https://plus.google.com/u/0/114130972232398734985/posts>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Guillaume Laforge
>>>>> Apache Groovy committer & PMC Vice-President
>>>>> Product Ninja & Advocate at Restlet <http://restlet.com>
>>>>>
>>>>> Blog: http://glaforge.appspot.com/
>>>>> Social: @glaforge <http://twitter.com/glaforge> / Google+
>>>>> <https://plus.google.com/u/0/114130972232398734985/posts>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Guillaume Laforge
>>>> Apache Groovy committer & PMC Vice-President
>>>> Product Ninja & Advocate at Restlet <http://restlet.com>
>>>>
>>>> Blog: http://glaforge.appspot.com/
>>>> Social: @glaforge <http://twitter.com/glaforge> / Google+
>>>> <https://plus.google.com/u/0/114130972232398734985/posts>
>>>>
>>>
>>>
>>
>
>
> --
> Guillaume Laforge
> Apache Groovy committer & PMC Vice-President
> Product Ninja & Advocate at Restlet <http://restlet.com>
>
> Blog: http://glaforge.appspot.com/
> Social: @glaforge <http://twitter.com/glaforge> / Google+
> <https://plus.google.com/u/0/114130972232398734985/posts>
>

Mime
View raw message