# InputStream auslesen



## michael94 (27. Feb 2014)

Hi,
Ist zwar viel Text, ich wär aber wahnsinnig dankbar, wenn mir einer helfen könnte.
bei dem Quelltext unten seht ihr ja dann, was ich machen will, das Problem ist, ich krieg es seit Tagen nicht hin, diesen blöden InputStream in der Methode load(InputStream is) auszulesen. Es funktioniert zwar, wenn ich es mit einem TypeCast probiere (String s = (String)(ObjectOutputStream)is).read(); ), aber ich soll es halt für InputStreams im Allgemeinen machen. Dabei habe ich schon so gut wie alles probiert, was ich so gefunden habe (oder zickt einfach mein Eclipse rum?):

1. StringWriter writer = new StringWriter();
    IOUtils.copy(inputStream, writer, encoding);
    String theString = writer.toString();
funktioniert nicht, weil Eclipse bei mir anzeigt, dass es IOUtils nicht finden kann, aber das ist doch in java.lang, oder?
Und bei den folgenden Varianten ist der String s immer leer:
2. Scanner scanner =new Scanner(is);
    Scanner s = scanner.useDelimiter("\\A");
    String st=s.hasNext() ? s.next():"";

3. byte[] b=new byte[is.available()];
    is.read(b);
    String s=new String(b);
    System.out.println(s);

4. InputStreamReader isr=new InputStreamReader(is);
    StringBuilder sb=new StringBuilder();
    BufferedReader br=new BufferedReader(isr);
    String read=br.readLine();
    while(read != null) {
        sb.append(read);
        read =br.readLine();
    }
    read=sb.toString();

5. ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int length = 0;
    while ((length = is.read(buffer)) != -1) {
        baos.write(buffer, 0, length);
    }
    String s=new String(baos.toByteArray());
    System.out.println(s);


```
try {
    File f = new File("testlauf.test");
    FileOutputStream fos=new FileOutputStream(f);
    ObjectOutputStream oos=new ObjectOutputStream(fos);

    oos.writeObject(sc.toString());

    oos.flush();
    oos.close();
}
catch (Exception e) {
    e.printStackTrace();
}
try {
    File f = new File("testlauf.test");
    FileInputStream fis=new FileInputStream(f);
    ObjectInputStream ois=new ObjectInputStream(fis);
    new MarketAnalyserConsole().run(System.in,System.out,ois);
    ois.close();
}
catch (Exception e) {
    e.printStackTrace();
}

public void run(InputStream in,OutputStream out,InputStream shareData)
{
		try{
		Collection<Share> coll=new CSVShareImporter().load(shareData);
...}

public class CSVShareImporter implements ShareImporter{
	public Collection<Share> load(InputStream is)
	{
		try
		{
			//String s=... irgendwie aus is den String rauszaubern
			return collectionAuswerten(s);// was genau das ist, ist hier egal
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}return null;
	}
```
Also vielen Dank schon mal
Michi


----------



## anti-held (27. Feb 2014)

Du schreibst dein Objekt per ObjectOutputStream also musst du auch einen solchen zum Auslesen verwenden!

z.B.


```
ObjectInputStream br = new ObjectInputStream(new FileInputStream("C:/tmp/resources/test.txt"));	
   String s = (String) br.readObject();
   System.out.println(s);
```

Da ich aber vermute du willst ja eigentlich nur Strings verschicken, reicht es wenn du einen BufferedOutputstream verwendest.

Das sollte dann so aussehen:


```
BufferedWriter writer = new BufferedWriter(new FileWriter("C:/tmp/resources/test.txt"));
		writer.write(new Integer(13).toString());
		writer.close();
		
		BufferedReader r = new BufferedReader(new FileReader("C:/tmp/resources/test.txt"));
		String line = "";
		
		while((line = r.readLine()) != null){
			System.out.println(line);
		}
		
		r.close();
```

Allgemein solltest du dir vill mal das Kapitel über IO aus dem Buch Java ist auch eine Insel anschauen:
Streams und Reader


----------

