liv2hak
liv2hak

Reputation: 14980

alternative to readLine() method in BufferedReader?

I am new to java Network programming.I was googling the code for a TCP client in java.I came across the following example.

import java.lang.*;
import java.io.*;
import java.net.*;

class Client {
   public static void main(String args[]) {
      try {
         Socket skt = new Socket("localhost", 1234);
         BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));
         System.out.print("Received string: '");

         while (!in.ready()) {}
         System.out.println(in.readLine()); // Read one line and output it

         System.out.print("'\n");
         in.close();
      }
      catch(Exception e) {
         System.out.print("Whoops! It didn't work!\n");
      }
   }
}

The client seems to read out the data one "line" at a time?. I am connecting to a server that is streaming OpenFlow packets.A wireshark screenshot of OpenFlow packets is given below.

[http://www.openflow.org/downloads/screenshot-openflow-dissector-2008-07-15-2103.jpg][1]

Once I recieve the complete packets I want to dump that to a file and then later read it using wireshark for example.In the above code they are using calss BufferedReader to read the data in "lines"? At least that is how I understand it.Is there someway in which I can get full packets and then write it to the file?

Upvotes: 1

Views: 7662

Answers (2)

matiasf
matiasf

Reputation: 1118

No, but there are libraries that provides such functions. See for example Guava

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/ByteStreams.html

If you don't want to (or can't) use libraries you shoud consume a stream like this

List<String> lst = new ArrayList<String>();
String line;
while ((line = in.readLine()) != null) {
   lst.add(line);
}

or

String str = "";
String line;
while ((line = in.readLine()) != null) {
   str += line + "\n";
}

Note that the BufferedReader.readLine() method will give you a new line on linebreaks ('\n'). If the InputStream is binary you should work with bytes instead.

Upvotes: 2

jtahlborn
jtahlborn

Reputation: 53694

Readers are for working with text data. If you are working with binary data (it's not entirely clear from that screenshot), you should be working with some type of Stream (either InputStream or possibly DataInputStream). Don't just look for random examples on online, try to find ones that actually apply to what you are interested in doing.

also, don't ever use InputStream.available, it's pretty much useless. as is any example code using it.

also, a simple google search for "OpenFlow java" had some interesting hits. are you sure you need to write something from scratch?

Upvotes: 2

Related Questions