美文网首页
java io包详解

java io包详解

作者: 炽热冰峰 | 来源:发表于2019-03-19 22:51 被阅读0次
    image.png image.png

    文件传输的样例(使用DataOutputStream ):
    https://blog.csdn.net/u010154380/article/details/78710840

    注意事项:
    在读取网络套接字的时候,由于网络状况的原因,每次read的字节数很可能不是write的字节数,需要多次read。(解决AES解密失败)
    示例代码:

    // 客户端发送文件,服务器接收文件
    dis = new DataInputStream(socket.getInputStream());
    
    String toName = dis.readUTF();
    String fileName = dis.readUTF();
    File dir = new File(baseStorePath + File.separatorChar + toName);
    if (!dir.exists()) {
        dir.mkdirs();
    }
    File file = new File(dir.getAbsolutePath() + File.separatorChar + fileName);
    fos = new FileOutputStream(file);
    while(true) {
       
        long len = 0;
        try {
            len = dis.readLong();// 文件总长度,从对端发送过来
        } catch (Exception e) {
    //                                e.printStackTrace();
    
            break;
        }
        if (len > 0) {
    
            byte[] data = new byte[(int) len];
            int readNum = 0;
            // 由于网络原因,一次read很可能没有读取所有内容,
            // 如果不加这个while循环容易导致解密失败。
            while(readNum < len) {
                readNum += dis.read(data, readNum, (int)(len-readNum));
            }
           
            String dataString = new String(data, "utf-8");
            String deString   = AESUtils.decrypt(dataString, client.getShareKey());
            byte[] deData     = Base64Utils.decode(deString);
            
            fos.write(deData, 0, deData.length);
            fos.flush();
        }else {
            break;
        }
    }
    

    具体参考:
    https://blog.csdn.net/nightcurtis/article/details/51324105
    https://blog.csdn.net/lmb55/article/details/79511007
    Java 的字节流文件读取(一)
    https://www.cnblogs.com/yangming1996/p/9046178.html

    相关文章

      网友评论

          本文标题:java io包详解

          本文链接:https://www.haomeiwen.com/subject/gxwomqtx.html