简体   繁体   中英

Client-Server File Transfer in Java

I'm looking for an efficient way to transfer files between client and server processes using TCP in Java. My server code looks something like this:

socket = serverSocket.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();

FileInputStream fis = new FileInputStream(new File(filename));

I'm just unsure of how to proceed. I know I want to read bytes from fis and then write them to os , but I'm unsure about the best way to read and write bytes using byte streams in Java. I'm only familiar with writing/reading text using Writers and Readers. Can anyone tell me the appropriate way to do this? What should I wrap os and fis in (if anything) and how do I keep reading bytes until the end of file without a hasNext() method (or equivalent)

You could do something like:

byte[] contents = new byte[BUFFER_SIZE];
int numBytes =0;
while((numBytes = is.read(contents))>0){
   os.write(contents,0,numBytes);
}  

You could use Apache's IOUtils.copy(in, out) or

import org.apache.commons.fileupload.util.Streams;
...
Streams.copy(in, out, false);

Inspecting the source might prove interesting. ( http://koders.com ?)

There is the java.nio.Channel with a transferTo method, with mixed opinions in the community wether better for smaller/larger files.

A simple block wise copy between Input/OutputStream would be okay. You could wrap it in buffered streams.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM