java io包详解

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。