java io包在哪里_java io包详解

0c690fcb5ac5

image.png

0c690fcb5ac5

image.png

注意事项:

在读取网络套接字的时候,由于网络状况的原因,每次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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值