java面试题

java面试题:https://www.cnblogs.com/51ma/p/12462688.html
mybaits-plus使用:https://www.jianshu.com/p/ceb1df475021
mybaits-puls简介:https://mp.baomidou.com/guide/
mysql的安装和配置:https://www.cnblogs.com/winton-nfs/p/11524007.html
vue子组件如何向父组件传值:https://www.cnblogs.com/ranyonsue/p/11696801.html
vue中v-model和v-bind绑定数据的异同:https://www.tangshuang.net/3507.html
vue中的插槽:https://www.cnblogs.com/loveyt/p/9946450.html
element-ui的滚动条组件el-scrollbar:https://www.cnblogs.com/myfirstboke/p/10218138.html
Vue父组件调用子组件事件的两种方法:https://www.jianshu.com/p/94c36323f733
Vue $emit $refs子父组件间方法的调用:https://www.cnblogs.com/IT123/p/11053186.html
在Vue单页面应用中使用Promise链式调用:https://www.cnblogs.com/Neilisme/p/10998048.html
vue中promise的使用:https://www.cnblogs.com/zhuzhenwei918/p/6915451.html
详解CSS的相对定位和绝对定位:https://www.cnblogs.com/heroine/p/5852748.html
Flex 布局语法教程 | 菜鸟教程:https://www.runoob.com/w3cnote/flex-grammar.html
彻底理解margin与padding:
https://www.jianshu.com/p/73deb2ae7992
纯CSS设置Checkbox复选框控件的样式:https://xiumu.org/technology/style-checkboxes-with-css.shtml
面试题-如何判断一个对象是不是数组类型:https://www.cnblogs.com/peerless1029/p/9950005.html
JavaScript的事件冒泡是什么:https://zhidao.baidu.com/question/498862147.html
正则表达式判断字符串是否为数字:
https://www.cnblogs.com/zhxn/p/9766455.html
springboot+redis:https://www.jianshu.com/p/19628db2e7ef
java全栈知识总结:https://pdai.tech/md/outline/x-outline.html
超详细!4小时开发一个SpringBoot+vue前后端分离博客项目!!:https://segmentfault.com/a/1190000022777009

使用FileChannel管道传输大文件的注意点
今天在项目中有windows系统向solaris系统传输数据的任务。

代码中,使用FileChannel管道传输数据。

FileChannel fcin = new FileInputStream(file).getChannel();
FileChannel fcout = new FileOutputStream(new File(bakFileDir,file.getName())).getChannel();
System.out.println(“文件大小:”+fcin.size());
long fileSize=fcin.size();
fcin.transferTo(0, fcin.size(), fcout); //如查文件小于4g时可不用上边的循环,直接用此即可完成拷贝
//ByteBuffer bb = ByteBuffer.allocate(1024);
//while (fcin.read(bb)!=-1){
// bb.flip();
// fcout.write(bb);
// bb.clear();//prepare for reading;清空缓冲
//}
fcin.close();
fcout.close();
粗看起来代码没什么问题,使用的是【FileChannel.transferTo】方法,我使用了几个小文件进行传输之后,都能够正确复制,没什么问题。但是,当遇到有一个文件特别大(达到了70多MB),这时候报出了如下的错误。

【系统资源不足,无法完成请求的服务。】网上调查下来,可能是内存不足的问题。但是我自己这边的机器和对方的机器的内存/虚拟内存,都还是很大的,应该没问题的。

这时候突然想到了以前有发生过JVM内存溢出的异常,这次会不会是同样的问题呢。

这下,不使用直接transferTo方法(虽然网上说,只要传输文件在4G以下,都可以用这种方式),显然是给它忽悠了。所以,改用了如下的这种方式,切块的形式传输。

//fcin.transferTo(0, fcin.size(), fcout); //如查文件小于4g时可不用上边的循环,直接用此即可完成拷贝
ByteBuffer bb = ByteBuffer.allocate(1024);
while (fcin.read(bb)!=-1){
bb.flip();
fcout.write(bb);
bb.clear();//prepare for reading;清空缓冲
}
注释了tranferTo方法,改用了ByteBuffer,果然好了。就是传输速度有点慢,毕竟目前为止是1MB的进行传输。较之前的不管多大的文件都一次性传输的速度要慢一点。

关于设置几MB一次进行文件传输,具体情况具体分析,可以尝试一下再修改其大小。

在这里贴出来,就是给大家共享一下,万一碰到相同的问题,可以快速的解决。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值