使用try catch finally关闭文件流:

  写入文件:

import java.io.*;
public class exp{
public static void main(String[] args) {
//流要在try外面声明,不然finally里面找不到这个流
OutputStream file = null;
try{
file = new FileOutputStream("iooooo.txt");
String str = "北邮\n";
byte[] b = str.getBytes();
for (int i=0; i<b.length; i++){
file.write(b[i]);
}
//在这里,如果发生异常,则close()不能被执行,所以要在finally里close()
//file.close();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(file!=null)
file.close();
}catch(Exception e){
e.printStackTrace();
}
} }
}

  读文件:

import java.io.*;
public class exp{
public static void main(String[] args) {
//流要在try外面声明,不然finally里面找不到这个流
InputStream file = null;
try{
file = new FileInputStream("ioo.txt");
int b = 0;
while(true){
b = file.read();
if(b == -1){
break;
}
System.out.println(b);
}
//在这里,如果发生异常,则close()不能被执行,所以要在finally里close()
//file.close();
}catch(Exception e){
System.out.println("try");
}finally{
try{
if(file!=null)
file.close();
System.out.println(file);
}catch(Exception e){
System.out.println("finally");
}
} }
}

字节流缓冲区拷贝文件:

import java.io.*;
public class exp{
public static void main(String[] args) throws Exception {
InputStream in = new FileInputStream("pic.png");
OutputStream out = new FileOutputStream("pp.png");
byte[] buff = new byte[1024];
int len;
while((len=in.read(buff)) != -1){
out.write(buff, 0, len);
}
in.close();
out.close();
}
}

在写这个的时候我没有仔细研究b=in.read()和b=in.read(byte[])的区别,以至于没弄懂这个buff。下面简单说明一下:

第一种:

int len;
while((len=in.read()) != -1){
out.write(len);
}

上面这种情况下in.read()返回的是从输入流中读取的8个字节的数据,并以int形式保存在len中。out.write(len);接受int中保存的数据,并将其写入out流中。

第二种:

byte[] buff = new byte[1024];
int len;
while((len=in.read(buff)) != -1){
out.write(buff, 0, len);
}

这种情况下,len=in.read(buff);中len表示的是读取字节的数目,此例就是1024,而真正存储数据的变成了buff这个字节数组。out.write(buff, 0, len);接受buff中从0到len个字节的数据,并将其写入out流中。

bingo~

字节缓冲流:存储很快~

import java.io.*;
public class exp{
public static void main(String[] args) throws Exception {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream("pic.png"));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("pp.png"));
int b;
while((b=bis.read()) != -1){
bos.write(b);
}
bis.close();
bos.close();
}
}

java——io、字节流缓冲区拷贝文件、字节缓冲流的更多相关文章

  1. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  2. Java IO学习笔记(二)缓冲流

    处理流:包在别的流上的流,可以对被包的流进行处理或者提供被包的流不具备的方法. 一.缓冲流:套接在相应的节点流之上,带有缓冲区,对读写的数据提供了缓冲的功能,提高读写效率,同时增加一些新的方法.可以减 ...

  3. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

  4. Java字节缓冲流和字符缓冲流学习

    1.字节缓冲流 首先要明确一个概念:对文件或其他目标频繁的读写操作,效率低,性能差. 使用缓冲流的好处是,能够高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来. BufferedInp ...

  5. IO——字节缓冲流

    缓冲流:BufferedInputStream / BufferedOutputStream 提高IO效率,减少访问磁盘的次数 数据存储在缓冲区,调用flush将缓存区的内容写入文件中,也可以直接cl ...

  6. Tomcat9.0.13 Bug引发的java.io.IOException:(打开的文件过多 Too many open files)导致服务假死

    问题背景: 笔者所在的项目组最近把生产环境Tomcat迁移到Linux,算是顺利运行了一段时间,最近一个低概率密度的(too many open files)问题导致服务假死并停止响应客户端客户端请求 ...

  7. 解决: java.io.IOException: 打开的文件过多 的问题

    问题 前一阵子公司项目做了一次压力测试, 中间出现了一个问题: 在50多个并发的时候会出现 java.io.IOException: 打开的文件过多 这个异常. 但是在没有并发的时候是不会出现这个问题 ...

  8. 字节缓冲流 ( BufferedInputStream / BufferedOutputStream)

    package com.sxt.reader; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; imp ...

  9. 1.java.io包中定义了多个流类型来实现输入和输出功能,

    1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G)   A.输入流和输出流 B ...

随机推荐

  1. Spring 已看 没用

    注解 @Autwired 依赖注入  作用: 自动按照类型注入.当使用注解注入属性时,set方法可以省略.它只能注入其他bean类型.当有多个类型匹配时,使用要注入的对象变量名称作为bean的id,在 ...

  2. Matlab 摄像机标定+畸变校正

    博客转载自:http://blog.csdn.net/Loser__Wang/article/details/51811347 本文目的在于记录如何使用MATLAB做摄像机标定,并通过opencv进行 ...

  3. GCC 版本与C11标准

    1. GCC版本是否支持C11 C89=C90:gcc选项是:-ansi, -std=c90 or -std=iso9899:; 带了GNU扩展的:-std=gnu90 C94=C95:gcc选项:- ...

  4. p2501 [HAOI2006]数字序列

    传送门 分析 https://www.luogu.org/blog/FlierKing/solution-p2501 对于第二问的感性理解就是有上下两条线,一些点在上面的线的上面或者下面的线的下面,然 ...

  5. Json Post到 https的坑 - the underlying connection was closed an unexpected error occurred on a send(远程服务器未知错误导致关闭)

    最近做了一个安装包,安装包会弹出dotnet的 窗体,这个安装包会去调用https的一个api.用测试程序测试窗体都是好的.一旦打入安装包后,就报错.研究了半天,原来是https惹的祸 解决方案: . ...

  6. XML DTD语法详解

    XML DTD详解   XML DTD详解 前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二 ...

  7. 二维码的生成细节和原理 -- 转http://news.cnblogs.com/n/191671/

    二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...

  8. 常用Git命令清单

    我现在工作几乎每天都使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用 ...

  9. Grideview总结

    http://www.cnblogs.com/sufei/archive/2010/03/27/1698590.html

  10. PostgreSQL 设置主键的序列值

    1. 问题的提出 PostgreSQL定义TABLE时,主键的字段类型可以设定为自增类型serial,即插入每条记录时,主键的值自动加1.但是,当插入数据的时候指定了具体的主键值,例如主键值从0到50 ...