Java基础 -> (TCP)客户端向服务端传递文件,附加流的关闭顺序

 /**
     * 文件传输,客户端到服务器,关闭流可以自动关闭Socket
     * 流只需要关闭最外层的流,内层的流也会自动关闭,但不能再有外层的流时去关闭内存的流
     * 那样会导致外层的流不能正常运行
     *
     * @throws IOException
     */

服务器端

 @Test
    public void testServer1() throws IOException {
        ServerSocket serverSocket = new ServerSocket(8899);
        Socket socket = serverSocket.accept();
        InputStream socketInputStream = socket.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(socketInputStream);
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("Test928.txt"));
        char[] chars = new char[1024];
        int len;
        while ((len = inputStreamReader.read(chars)) != -1) {
            bufferedWriter.write(chars, 0, len);
        }
        //流关闭之后socket会自动关闭,主动关闭和不关闭都可以
        //serverSocket.close();
        //socket.close();
        //socketInputStream.close();
        //流只需要关闭最外层的处理流就可以全部关闭,
        // 但是要是有处理流缺先关闭了内层的节点流就会使得处理流不能执行报异常
        inputStreamReader.close();
        bufferedWriter.close();
    }

客户端

   @Test
    public void testClient1() throws IOException {
        Socket socket = new Socket("10.212.10.194", 8899);
        OutputStream socketOutputStream = socket.getOutputStream();
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socketOutputStream);
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("Test921复制文件.txt"));
        char[] chars = new char[1024];
        int len;
        while ((len = inputStreamReader.read(chars)) != -1) {
            outputStreamWriter.write(chars, 0, len);
        }
        outputStreamWriter.close();
        //这个可以不关闭,关闭outputStreamWriter就可以了,
        // 且socketOutputStream不能放在outputStreamWriter前面关闭
        //socketOutputStream.close();
        inputStreamReader.close();
        //流关闭之后socket会自动关闭,主动关闭和不关闭都可以
        //socket.close();
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值