Java. La lecture de BufferedInputStream et écrire à FileOutputStream

Je suis en train d'écrire le côté serveur et client sur java. Côté serveur est ok (vérifié sur plusieurs clients).

Donc, le problème est sur le côté client. J'alloue de la mémoire pour bytearray, lire BufferedInputStream et écrire bytearray. Alors l'écriture de bytearray à FileOutputStream. Tout est ok, mais l'espace libre de bytearray est le remplissage par des Zéros, donc le fichier reçu n'est pas correct(par exemple, des images).

J'ai trouvé 2 décision de ce problème:

  1. Lire à bytearray jusqu'à la fin du fichier(mais je ne sais pas si la fin de fichier)
  2. Lire à partir de BufferedInputStream à FileInputStream, mais ça ne fonctionne pas:

J'ai réellement besoin de recevoir d'en-tête et fichier. En-tête de sortie de la console et écrire le fichier sur le disque.

Source Complet

public class SClient {
private static int bufferSize = 8192;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Enter the address:");
BufferedReader bufferRead = new BufferedReader
(new InputStreamReader(System.in));
try {
String address = bufferRead.readLine();
System.out.println("Enter the extention of receiving file:");
String fileExt = bufferRead.readLine();
//TODO code application logic here
Socket socket = new Socket(address,4040);
BufferedInputStream bis = new BufferedInputStream
(socket.getInputStream());
BufferedOutputStream bout = new BufferedOutputStream
(socket.getOutputStream());
System.out.println("Enter the request:");
String message = bufferRead.readLine();//GET /index.html HTTP/1.0
System.out.println("Header read");
if(message!=null){
bout.write(message.getBytes());
}
FileOutputStream fout = new FileOutputStream("out"+fileExt);
String s1 = "\r\n\r\n";
bout.write(s1.getBytes());
bout.flush();
System.out.println("Header sent");
byte[] res = new byte[bufferSize];
int got;
while((got = bis.read(res))!=-1){
fout.write(res,0,got);
}
fout.close();
bout.flush();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

Côté serveur source:

    String endLine = "\r\n";
File f = new File(fileName);
FileInputStream fstream;
fstream = new FileInputStream(f);
response = "HTTP/1.0 200 OK" + endLine;
header = "Content-type: "+ contentType + endLine + "Content-length: " + f.length() + endLine + endLine;
bout.write(response.getBytes());
bout.write(header.getBytes());
while(fstream.read(buffer) != -1) {
bout.write(buffer);
}
System.out.println("Message sent");
bout.flush();
socket.close();
InformationsquelleAutor sanatik | 2013-09-13