# Dateiübertragung - Datei immer ein 4096faches von n



## CyD (21. Mrz 2008)

Tach Leute,

ich hab ein Programm geschrieben, um Dateien vom Sender zum Receiver zu übertragen.
Schön und gut, funktioniert auch akzeptabel. 
Allerdings haben die Dateien nicht mehr ihre Originalgröße sonder ein vielfaches 
des Buffers (4096).  
Wenn der letzte Block übertragen wird, wird der Rest des Buffers noch gefüllt. 
Im Hexeditor sieht man am Ende der Dateien eine ganze reihe Nuller.

*Server/Sender:*

```
try {		
	this.server = new ServerSocket(12345);
	this.client = this.server.accept();

	BufferedOutputStream outputStream = new BufferedOutputStream(this.client.getOutputStream());
        InputStream in = new FileInputStream(this.file);
	    
	byte[] buf = new byte[4096];
	int len;
	while ((len = in.read(buf)) > 0) {
	       	this.outputStream.write(buf);
	}
	in.close();
	outputStream.close();
	this.server.close();
					
} catch (Exception e) {
	e.printStackTrace();
}
```


*Client/Receiver:*

```
try {
	this.socket = new Socket("localhost",12345);
			
	BufferedInputStream inputStream = new BufferedInputStream(this.socket.getInputStream(),4096);
	BufferedOutputStream outputStream = new BufferedOutputStream(this.socket.getOutputStream(),4096);		
	OutputStream writer = new FileOutputStream(new File("J:\\test\\datei1"));
		
	byte[] buf = new byte[4096];
	int len;
	while ((len = inputStream.read(buf)) > 0) {
		this.writer.write(buf);
	}
	inputStream.close();
	outputStream.close();
	writer.close();
	this.socket.close();
} catch (UnknownHostException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
}
```

Die Buffergröße auf "1" zu senken kann nicht die Lösung sein, oder?

Wie kann ich im Code einbauen, das die ganzen leeren Bytes am Ende 
weggeschnitten werden?
Legt der Fehler eher auf der Serverseite oder beim Client?

Wäre super wenn ihr mir helfen könnt!

gruss
CyD


----------



## Marco13 (21. Mrz 2008)

Bei this.writer.write(buf);  wird immer der ganze array geschrieben. Es gibt auch eine write-Methode, der man mitgeben kann, wieviel geschrieben werden soll (write(array, length, offset) oder so), der kannst du dann dein 'len' mit übergeben...


----------



## CyD (21. Mrz 2008)

Danke dir Marco13!

Genau das hat gefehlt...


----------

