How can I load my Java input / output / file streams correctly?

I am writing an application that should send a file over the network. I have been taught to use the standard classes java.net and java.io so far (in my first year of college), so I have no experience with java.nio and netty, and all these nice things. I have a working server / client configured using the Socket and ServerSocket classes along with the BufferedInput / OutputStreams and BufferedFile streams, as shown below:

Server:

    public class FiletestServer {

    static ServerSocket server;
    static BufferedInputStream in;
    static BufferedOutputStream out;

    public static void main(String[] args) throws Exception {
    server = new ServerSocket(12354);
    System.out.println("Waiting for client...");
    Socket s = server.accept();
    in = new BufferedInputStream(s.getInputStream(), 8192);
    out = new BufferedOutputStream(s.getOutputStream(), 8192);
    File f = new File("test.avi");
    BufferedInputStream fin = new BufferedInputStream(new FileInputStream(f), 8192);

    System.out.println("Sending to client...");
    byte[] b = new byte[8192];
    while (fin.read(b) != -1) {
        out.write(b);
    }
    fin.close();
    out.close();
    in.close();
    s.close();
    server.close();
    System.out.println("done!");
    }
}

And the client:

public class FiletestClient {

    public static void main(String[] args) throws Exception {
    System.out.println("Connecting to server...");
    Socket s;
    if (args.length < 1) {
        s = new Socket("", 12354);
    } else {
        s = new Socket(args[0], 12354);
    }
    System.out.println("Connected.");
    BufferedInputStream in = new BufferedInputStream(s.getInputStream(), 8192);
    BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream(), 8192);
    File f = new File("test.avi");
    System.out.println("Receiving...");
    FileOutputStream fout = new FileOutputStream(f);
    byte[] b = new byte[8192];
    while (in.read(b) != -1) {
        fout.write(b);
    }
    fout.close();
    in.close();
    out.close();
    s.close();
    System.out.println("Done!");
    }
}

int in.read(). 200 / Windows 7. , , 4096 - , , , . 8192, 3.7-4.5mb/sec , , , ( md5/sha), .

, , ? , , . , , , .

+5
2

.

while (in.read(b) != -1) {
    fout.write(b);
}

8192 , .

for(int len; ((len = in.read(b)) > 0;)
   fout.write(b, 0, len);

, [], .

MTU 1500 , ( 1 ) 2 . 8 . , .

+5

All Articles