Solved

Read from socket

Posted on 2002-06-02
9
678 Views
Last Modified: 2010-08-05
Hi all
I am using non blocking IO for connecting clients to IRC server. In order to do so, I read from the socket using ByteBuffer. Is it possible to read line after line instead of buffer? I need to parse each line seperatlly and It's a problem reading the information in blocks.
   
    Thanks
0
Comment
Question by:dannysh
  • 4
  • 4
9 Comments
 
LVL 35

Expert Comment

by:girionis
ID: 7049501
 Yes you can. Create a BufferedReadre instead:

BufferedReader reader = new BufferedReader(new InputStreamReader(<your socket variiable>.getInputStream()));

  Then use it like:

  String line = reader.readLine();

  to read the data line by line.

  Hope it helps.
0
 

Author Comment

by:dannysh
ID: 7049503
Hi girionis
Can I use BufferedReader in socketChannel in order to read from the socket? I think you can't do it am I right? I am using socketChannel to read from the socket.
0
 
LVL 35

Expert Comment

by:girionis
ID: 7049627
 Hmmm. I really do not know. I am not very familiar with the nio package. Maybe if you take a look at the documentation will help you.

  Hope it helps.
0
Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 35

Accepted Solution

by:
girionis earned 50 total points
ID: 7050162
 Something else you could do is to read the characters one by one until you find the newline character ('\n') and then append it to a string. Since a new line characters indicates the end of the line then I guess it would be equal as reading a whole line using BufferedReader's readLine() method.

  Hope it helps.
0
 

Author Comment

by:dannysh
ID: 7050418
Hi girionis
reading char by char can be very slow specially when there are huge number of sockets.
   
0
 
LVL 9

Expert Comment

by:Venci75
ID: 7050493
I would say - this is the only way to search for '\n' character. The BufferedReader is doing the same. To improve the performance of this reading - wrap the socket stream with a BufferedInputStream:

java.io.BufferedInputStream in = new java.io.BufferedInputStream(<your socket variiable>.getInputStream());

 
0
 

Author Comment

by:dannysh
ID: 7050499
Hi Venci75
As far as I know the architucture of socketChannel and Selector does not allow you using the BufferedInputStream for reading the information.
I think I will read the information into ByteBuffer and parse this buffer looking the /n char which will indicate new line.
It is not possible using BufferedInputStream.
 
0
 

Author Comment

by:dannysh
ID: 7065149
I used this idea.
  Thanks
0
 
LVL 35

Expert Comment

by:girionis
ID: 7065493
 Thank you for the points dannysh. I am glad I helped :-)
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
ejb stateless example 2 25
Is there a simpler dropbox system? 10 34
collection output issue 9 37
Java class and jar 3 24
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:

837 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question