ByteArrayOutputStream关闭问题

hmy468689496 2016-09-28 09:28:06
ByteArrayOutputStream里面的close关闭无效,是一个空实现源码。那么有木有办法对其进行有效的关闭?不关闭对性能有影响吗?
项目经理问过我为什么关流问题了,,,但是这个流是关闭不掉的,所以在寻找如何有效关闭。而jdk既然让这个字节数组流关闭无效,那么自然有他的道理,那既然jdk的设计者们都没让他关,所以我在此一问性能问题的影响。共两个问题哈
...全文
1505 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
JVM 可以监测托管内存的使用,所以如果你的一个类除了托管内存不占用其它东西,是可以完全交给 JVM 处理的。 StringWriter 也同理。 但是如果你不知道它是一个 ByteArrayOutputStream,只知道它是 OutputStream,那就没办法了。有功夫判断还不如直接 close()。
hmy468689496 2016-09-29
  • 打赏
  • 举报
回复
这个回答好,,就想问为啥不用关。虚拟的流,谢谢哈
小灰狼 2016-09-28
  • 打赏
  • 举报
回复 2
ByteArrayOutputStream/ByteInputStream 都是对内存中的字节数据的访问,只是一个虚拟的流,没有占用网络、磁盘文件等资源,所以没有关闭的必要,实现上也是空 但是,对流进行关闭是一个好习惯,或者说,你必须保证所有的 OutputStream 对象必须被调用 close
Java生成密钥的实例    //产生单钥加密的密钥(myKey)   KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede"); //采用DESede算法   keyGenerator.init(168); //选择DESede算法,密钥长度为112位或168位   Key myKey = keyGenerator.generateKey(); //生成密钥   System.out.println("得到单钥加密密钥");   //产生双钥的密钥对(keyPair)   KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA"); //采用RSA算法   keyPairGenerator.initialize(1024); //指定密钥长度为1024位   KeyPair keyPair = keyPairGenerator.generateKeyPair(); //生成密钥对   System.out.println("生成张三的公钥对");   //保存公钥的字节数组   File f = new File("publicKey.dat"); //保存公钥到文件publicKey.dat   FileOutputStream fout = new FileOutputStream(f);   fout.write(keyPair.getPublic().getEncoded()); //得到公钥的字节数组   fout.close(); //关闭文件输出流   System.out.println("保存公钥到文件: " f.getAbsolutePath());   //用Java对象序列化保存私钥,通常应对私钥加密后再保存   ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("privateKey.dat")); //保存私钥到文件privateKey.dat   oout.writeObject(keyPair.getPrivate()); //序列化私钥   oout.close(); //关闭输出流   System.err.println("保存私钥到: privateKey.dat");   //从文件中得到公钥编码的字节数组   FileInputStream fin = new FileInputStream("publicKey.dat"); //打天publicKey.dat   ByteArrayOutputStream baout = new ByteArrayOutputStream(); //用于写入文件的字节流   int aByte = 0;   while ((aByte = fin.read())!= -1) //从文件读取一个字节   {    baout.write(aByte); //写入一个字节   }   fin.close(); //关闭文件输入流   byte[] keyBytes = baout.toByteArray(); //得到公钥的字节数组   baout.close(); //关闭字节数组输出流

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧