字节输出流OutputStream
1、输出流
(1)字节输出流:FileOutputStream
OutputStream是输出流的超类,它是一个抽象类。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:\\IO流\\java\\1.txt");
FileOutputStream f = new FileOutputStream(file, true);// 加true后可以实现续写功能
String str = "\r\n" + "nihao";// 换行
f.write(str.getBytes());
f.write("你好".getBytes());
f.write();
f.close();//释放输出流的资源占用 }
}
(2)字节缓冲输出流:BufferedOutputStream
write()方法所写的数据并不是直接写入到外设,而是先存放到缓冲区中,积累到一定程度再写到外设,这样可以提高系统效率。但有的时候缓冲区不满就需要写到外设上,需要调用flush()方法。
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; public class BufferedOutputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:\\IO流\\java\\123.txt");
FileOutputStream f = new FileOutputStream(file, true);// 加true后可以实现续写功能
BufferedOutputStream bos = new BufferedOutputStream(f); bos.write("你好".getBytes()); bos.close();
}
}
(3)OutputStream与BufferedOutputStream效率对比:
使用缓冲流:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedOutputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:\\IO流\\java\\123.txt");
FileOutputStream f = new FileOutputStream(file, true);// 加true后可以实现续写功能
BufferedOutputStream bos = new BufferedOutputStream(f);
long startTime = System.currentTimeMillis();
for(int i=;i<=;i++)
bos.write("你好".getBytes());
long endTime = System.currentTimeMillis();
System.out.println("执行此程序用了" + (endTime - startTime) + "毫秒。");
bos.close(); }
}
未使用缓冲流:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; public class BufferedOutputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:\\IO流\\java\\123.txt");
FileOutputStream f = new FileOutputStream(file, true);// 加true后可以实现续写功能 long startTime = System.currentTimeMillis();
for (int i = ; i <= ; i++)
f.write("你好".getBytes());
long endTime = System.currentTimeMillis();
System.out.println("执行此程序用了" + (endTime - startTime) + "毫秒。");
f.close(); }
}
(4)文件字符输出流:FileWriter
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterDemo {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("E:\\IO流\\java\\1.txt");
char []c={'n','i','h','a','o'};
String str="我爱java";
fw.write(c);
fw.write("\t\n"+"你好java"+"\t\n");//先编码
fw.write(str, 0, 2);
fw.flush();
fw.close(); }
}
(5)字符缓冲输出流:BufferWriter
package pers.aaa.Writer;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferWriter {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("E:\\IO流\\java\\1.txt");
BufferedWriter out = new BufferedWriter(fw);
char []c={'n','i','h','a','o'};
String str="我爱java";
out.write(c);
out.newLine();
out.write("你好java");//先编码
out.newLine();
out.write(str, 0, 2);
out.flush();
out.close(); }
}
2、输入流
(1)字节输入流:InputStream
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:\\IO流\\java\\1.txt");
FileInputStream f = new FileInputStream(file);
int n = 0;
while ((n = f.read()) != -1) {
System.out.print((char) n); }
f.close();
}
}
能够读取到文件上的数据:
(2)字节输入缓冲流:BufferedInputStream
package pers.zaw.in; import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class BufferedInputStreamDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:\\IO流\\java\\1.txt");
FileInputStream f = new FileInputStream(file);
BufferedInputStream in = new BufferedInputStream(f);
int n = 0; while ((n = in.read()) != -1) {
System.out.print((char) n); } in.close();
}
}
(3)字符输入:FileReader
FileReader继承自InputStreamReader类,InputStreamReader类继承自Reader类。
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException; public class FileReaderDemo {
public static void main(String[] args) throws IOException {
//读取文字
FileReader fr = new FileReader("E:\\IO流\\java\\1.txt");
int ch = 0;
while ((ch = fr.read()) != -1) {
// 输出的字符对应的编码值
System.out.print(ch);
System.out.print((char) ch);
System.out.println();
}
//写入文字
FileOutputStream fos = new FileOutputStream("E:\\IO流\\java\\8.txt");
fos.write("读取文件".getBytes());//编码过程
fos.close(); }
}
(4)字符缓冲输入流:BufferedReader
package pers.was.Reader; import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
// 读取文字 BufferedReader in = new BufferedReader(new FileReader(
"E:\\IO流\\java\\1.txt"));
int ch = 0;
while ((ch = in.read()) != -1) {
// 输出的字符对应的编码值
System.out.print(ch);
System.out.print((char) ch);
System.out.println();
} }
}
(5)readLine()读取一个文本行
package pers.was.Reader; import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
// 读取文字
FileReader fr=new FileReader("E:\\IO流\\java\\1.txt");
BufferedReader in = new BufferedReader(fr);
String line = null;
while( (line = in.readLine()) != null ){
System.out.println(line);
} //3,关闭流
in.close(); }
}
3、应用
(1)文件复制:
用FileInputStream和FileOutPutStream实现文件的复制,此方法不能复制文件夹。
package pers.zhh.copy; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class CopyDemo {
public static void main(String[] args) throws IOException {
FileInputStream fi = new FileInputStream("M:\\数据库.zip");
FileOutputStream fo = new FileOutputStream("M:\\数据库1.zip");
int num = 0;
long startTime = System.currentTimeMillis();
while ((num = fi.read()) != -1) {
fo.write(num); }
fo.close();
fi.close();
long endTime = System.currentTimeMillis();
System.out.println("执行此程序用了" + (endTime - startTime) + "毫秒。");
}
}
(2)缓冲数组实现复制:
package pers.zzz.copy; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class CopyDemo1 {
public static void main(String[] args) throws IOException {
FileInputStream fi = new FileInputStream("M:\\网页设计.zip");
FileOutputStream fo = new FileOutputStream("M:\\网页设计3.zip");
byte[] buf = new byte[1024];
int len = 0;
long startTime = System.currentTimeMillis();
while ((len = fi.read(buf)) != -1) {
fo.write(buf, 0, len); // 将数组中的指定长度的数据写入到输出流中。
}
fo.close();
fi.close();
long endTime = System.currentTimeMillis();
System.out.println("执行此程序用了" + (endTime - startTime) + "毫秒。");
} }
在第一个方法中,一次只能读取一个数据字节,复制只有几M的数据花了7s时间,效率极低。而第二种采用缓冲数组的方式,复制接近1G的文件只花费了4s的时间,效率大大提升。
(3)IO流的异常处理
package pers.zzz.copy; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class CopyDemo1 {
public static void main(String[] args) {
FileOutputStream fo = null;
FileInputStream fi = null;
long startTime = System.currentTimeMillis();
try {
fi = new FileInputStream("M:\\网页设1计.zip");
fo = new FileOutputStream("M:\\网页设计11.zip"); byte[] buf = new byte[1024];
int len = 0; while ((len = fi.read(buf)) != -1) {
fo.write(buf, 0, len); // 将数组中的指定长度的数据写入到输出流中。
}
} catch (IOException e) {
System.out.println(e.toString());
} finally {
if (fo != null) {
try {
fo.close();
} catch (IOException e) {
System.out.println(e.toString());
throw new RuntimeException();
}
}
if (fi != null) {
try {
fi.close();
} catch (IOException e) {
System.out.println(e.toString());
throw new RuntimeException(); } } }
long endTime = System.currentTimeMillis(); System.out.println("执行此程序用了" + (endTime - startTime) + "毫秒。");
}
}
4、缓冲流的好处
如果没有缓冲流,则是读一个数据写一个数据,耗费了较多的时间。
应用了缓冲流之后,则是等到缓冲区满的时候,或是调用了flush();函数后才会输出,提高了效率。
字节输出流OutputStream的更多相关文章
- 00089_字节输出流OutputStream
1.字节输出流OutputStream (1)OutputStream此抽象类,是表示输出字节流的所有类的超类.操作的数据都是字节,定义了输出字节流的基本共性功能方法: (2)输出流中定义都是写wri ...
- Java 之 字节输出流[OutputStream]
一.字节输出流 java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地. 该类中定义了字节输出流的基本共性功能方法. 公性方法: public v ...
- javaIO操作之字节输出流--OutputStream
OutputStream /** * <li>输出单个字节:public abstract void write(int b) throws IOException ; * <li& ...
- IO流-字节输出流OutputStream异常处理
package it.cast_01; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ja ...
- IO初步,字节输入流和字节输出流
字节输出流 OutputStream(基类,抽象) 特点:写任意的文件 方法:写出数据的方法:write write(int b) 写出1个字节 -128~127之间,写的是一个ASCLL码的值 wr ...
- [19/03/30-星期六] IO技术_四大抽象类_ 字节流( 字节输入流 InputStream 、字符输出流 OutputStream )_(含字节文件缓冲流)
一.概念及分类 InputStream(输入流)/OutputStream(输出流)是所有字节输入输出流的父类 [注]输入流和输出流的是按程序运行所在的内存的角度划分的 字节流操作的数据单元是8的字节 ...
- 【java】io流之字节输出流:java.io.OutputStream类及子类java.io.FileOutputStream
package 文件操作; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...
- java 20 - 9 带有缓冲区的字节输出流和字节输入流
由之前字节输入的两个方式,我们可以发现,通过定义数组读取数组的方式比一个个字节读取的方式快得多. 所以,java就专门提供了带有缓冲区的字节类: 缓冲区类(高效类) 写数据:BufferedOutpu ...
- java中输出流OutputStream 类应用实例(转)
OutputStream类该类是字节输出流的抽象类,定义了输出流的各种操作方法.这些方法的说明如表1所示.下面通过实例介绍如何使用OutputStream类向控制台输出字符串信息.步骤如下.(1)创建 ...
随机推荐
- 使用 .NET CORE 创建 项目模板,模板项目,Template
场景:日常工作中,你可能会碰到需要新建一个全新的解决方案的情况(如公司新起了一个新项目,需要有全新配套的后台程序),如果公司内部基础框架较多.解决方案需要DDD模式等,那么从新起项目到各种依赖引用到能 ...
- 在linux中用同一个版本的R 同时安装 Seurat2 和 Seurat3
在linux中用同一个版本的R 同时安装 Seurat 2 和 Seurat 3 Seurat 作为单细胞分析中的重量级R包,有多好用用,用过的人都知道.Seurat 分析流程基本涵盖了单细胞分析中 ...
- 性能测试学习第七天-----JMeter之linux环境部署篇
一.linux获取动态ip或静态ip: 1. virtualbox 加载linux虚拟机镜像文件,加载时重置全部网卡,加载后网络选择“桥接网络”--本机当前使用网卡: 2. ifconfig ...
- Appium+Python+Genymotion ------环境配置
前言 之前总是在找方向,也研究了很多的工具,终于找到了适合自己的一套,打算把学习的过程做一个记录,给自己加深印象,也希望能给其他人一些帮助. 一.工具准备 1.Appium // http://a ...
- 【JavaScript】论一个低配版Web实时通信库是如何实现的之二( EventSource篇)
前情提要 「 话说上回说到!那WebSocket大侠,巧借http之内力,破了敌阵的双工鸳鸯锁,终于突出重围. 然而玄难未了,此时web森林中飞出一只银头红缨枪,划破夜色. "莫非!?&qu ...
- HDU 5135(再思考)
题意略. 思路:再思考后发现,为了构造出最大的三角形面积和,我们应该尽量让长的棍子相组合,这样构造出的三角形面积和最大,贪心能解. #include<bits/stdc++.h> usin ...
- 百度地图小Demo---获取当前地址以及拖拽显示地址
1.效果图 2.源码 主要使用百度地图的JavaScript API文件,以及一个JQuery文件. <!doctype html> <html lang="en" ...
- 17_defer(延迟调用)关键字的使用
1.defer是延迟调用关键字,只能在函数内部使用 2.总是在main函数结束前调用(和init用法相对) 3.如果有多个defer 遵循先进后出的原则 4.和匿名函数同时使用时,如果匿名函数带有参数 ...
- vmware上安装的ubuntu连接不上网络
解决方法如下: 1.右键点击ubuntu,选择“设置” 2.网络适配器设置为“仅主机模式”:与主机共享的专用网络.点击“确定”即可.
- cogs2823求组合数(lucas定理
http://cogs.pro:8080/cogs/problem/problem.php?pid=vNQJJVUVj 再写个数学水题,其实lucas适用于m,n比较大而p比较小的情况. 题意:给出两 ...