java io包详解

2019-03-19  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读