将 文件 转换为 字节数组 的两个方法有什么区别吗?
源代码1:
InputStream in = new FileInputStream("E:\java编程思想.jpg");
byte[] data = new byte[in.available()];
in.read(data);
源代码2:
InputStream in = new FileInputStream("E:\java编程思想.jpg");
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] data = null;
byte[] buf = new byte[1024];
int numBytesRead = 0;
while ((numBytesRead = in.read(buf)) != -1) {
output.write(buf, 0, numBytesRead);
}
data = output.toByteArray();
以上两个程序有什么性能上的区别吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
内存映射文件,Filechannel的map()方法,性能应该会更好
引用来自“战争总会来临”的评论
看你内容够用不。第一个一下申请很多内存,小心OOM;第二个慢一点,更安全。
根据wiki的说法,使用2^N大小的内存,是为了避免产生碎片。我自己曾经使用过64K的空间,来缓存视频文件。
内存从一个2的N次幂大的内存块中分配。当内存块比要分配的长度大两倍以上,内存块平均分裂成两块。选中其中一半,重复这个过程(检查长度,满足条件则分裂)直到内存块刚好等于需要的长度。
所有的块信息保存在一个排序过的链表或者二叉树中。当一个块被释放的时候与他的相邻块进行比较。如果他们都被释放,就合并成一个大块放进更大的一个块列表 中。每当分配结束,分配器会从尽量小的块重新开始分配,以避免产生不必要的碎片。
引用来自“战争总会来临”的评论
看你内容够用不。第一个一下申请很多内存,小心OOM;第二个慢一点,更安全。
还有 我想问一下为什么一般创建字节数组的长度都是1024,比如这样:new byte[1024],为什么没见过用1000或其他数字的?
看你内容够用不。第一个一下申请很多内存,小心OOM;第二个慢一点,更安全。