IO流的字节流InputStream、OutputStream
2014-09-10 09:59
495 查看
字节流可以操作非文本数据,方法原理与字符流的类似,只是字符流用的是字符数组,字节流用的是字节数组。
InputStream子类FileInputStream读文件
OutputStream子类FileOutputStream写文件
一、FileOutputStream写文件
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("abdskaf".getBytes()); //getBytes()将字符串变成字节数组
//不需要刷新,字节流的字节可以单个操作,有一个字节就处理一个字节,对字节最小单位的操作,不需要做转换。
//而字符流,例如中文,需要读取两个字节,然后查编码表,最后处理,所以需要刷新流资源。
fos.close(); //这个需要写,虽然不具有刷新的功能,但是要关闭流资源
二、FileInputStream读文件
//读取文件方式一:一个一个地读
public static void readFile_1() throws IOException{
FileInputStream fis = new FileInputStream("fos.txt");
int ch =0;
while( ( ch = fis.read() ) !=-1 ){
System.out.println( (char)ch );
}
fis.close();
}
//读取文件方式二:
public static void readFile_2() throws IOException{
FileInputStream fis = new FileInputStream("fos.txt");
byte[] buf = new byte[1024];
int len=0;
while( ( len = fis.read(buf) ) !=-1 ){
System.out.println( new String(buf,0,len) );
}
fis.close();
}
//读取文件方式三:字节流特有的方法aviable().
public static void readFile_3() throws IOException{
FileInputStream fis = new FileInputStream("fos.txt");
int num = fis.aviable();
byte[] buf = new byte[num]; //定义一个刚刚好的缓冲区,不用再循环了
fis.read(buf);
System.out.println( new String(buf) );
fis.close();
}
第三种读取方式的弊端,如果处理的是一个很大的媒体对象,需要很大的内存,不建议使用创建一个刚刚好的缓冲区。
三,图片的拷贝
1.用字节读取流对象和图片关联
2.用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3.通过循环读写,完成数据的存储。
4.关闭资源
public static boid main(String[] args){
FileOutputStream fos = null;
FileInputStream fis = null;
try{
fos = new FileOutputStream();
fis = new FileInputStream();
byte[] buf = new byte[1024];
int len = 0;
while( (len = fis.read() )!=-1){
fos.write(buf,0,len);
}
}catch(IOException e){
throw new RuntimeException("复制文件失败");
}finally{
try{
if(fis!=null) fis.close();
}catch(IOException e){
throw new RuntimeException("读取关闭失败");
}
try{
if(fos!=null) fos.close();
}catch(IOException e){
throw new RuntimeException("写入关闭失败");
}
}
}
四、通过字节流的缓冲区完成复制BufferedInputStream 、BufferedOutputStream
BufferedInputStream bufis = new BufferedInputStream(newFileInputStream("c:\\0.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(newFileOutputStream("c:\\1.mp3"));
int by = 0;
while( by = bufis.read() !=-1 ){
bufos.write(by);
}
bufos.close();
bufis.close();
InputStream子类FileInputStream读文件
OutputStream子类FileOutputStream写文件
一、FileOutputStream写文件
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("abdskaf".getBytes()); //getBytes()将字符串变成字节数组
//不需要刷新,字节流的字节可以单个操作,有一个字节就处理一个字节,对字节最小单位的操作,不需要做转换。
//而字符流,例如中文,需要读取两个字节,然后查编码表,最后处理,所以需要刷新流资源。
fos.close(); //这个需要写,虽然不具有刷新的功能,但是要关闭流资源
二、FileInputStream读文件
//读取文件方式一:一个一个地读
public static void readFile_1() throws IOException{
FileInputStream fis = new FileInputStream("fos.txt");
int ch =0;
while( ( ch = fis.read() ) !=-1 ){
System.out.println( (char)ch );
}
fis.close();
}
//读取文件方式二:
public static void readFile_2() throws IOException{
FileInputStream fis = new FileInputStream("fos.txt");
byte[] buf = new byte[1024];
int len=0;
while( ( len = fis.read(buf) ) !=-1 ){
System.out.println( new String(buf,0,len) );
}
fis.close();
}
//读取文件方式三:字节流特有的方法aviable().
public static void readFile_3() throws IOException{
FileInputStream fis = new FileInputStream("fos.txt");
int num = fis.aviable();
byte[] buf = new byte[num]; //定义一个刚刚好的缓冲区,不用再循环了
fis.read(buf);
System.out.println( new String(buf) );
fis.close();
}
第三种读取方式的弊端,如果处理的是一个很大的媒体对象,需要很大的内存,不建议使用创建一个刚刚好的缓冲区。
三,图片的拷贝
1.用字节读取流对象和图片关联
2.用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3.通过循环读写,完成数据的存储。
4.关闭资源
public static boid main(String[] args){
FileOutputStream fos = null;
FileInputStream fis = null;
try{
fos = new FileOutputStream();
fis = new FileInputStream();
byte[] buf = new byte[1024];
int len = 0;
while( (len = fis.read() )!=-1){
fos.write(buf,0,len);
}
}catch(IOException e){
throw new RuntimeException("复制文件失败");
}finally{
try{
if(fis!=null) fis.close();
}catch(IOException e){
throw new RuntimeException("读取关闭失败");
}
try{
if(fos!=null) fos.close();
}catch(IOException e){
throw new RuntimeException("写入关闭失败");
}
}
}
四、通过字节流的缓冲区完成复制BufferedInputStream 、BufferedOutputStream
BufferedInputStream bufis = new BufferedInputStream(newFileInputStream("c:\\0.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(newFileOutputStream("c:\\1.mp3"));
int by = 0;
while( by = bufis.read() !=-1 ){
bufos.write(by);
}
bufos.close();
bufis.close();
相关文章推荐
- 黑马程序员_学习笔记:13) IO流: 字节流(InputStream、OutputStream)、字符流(Reader、Writer)、File类、递归
- IO流之----字节流(InputStream和OutputStream)
- java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr
- IO流——(字节流)OutputStream和InputStream
- 黑马程序员------IO流(No.2)(字节流、InputStream、OutputStream、转换流、改变输入输出设备)
- Java基础 - IO流之字节流,FileInputStream,FileOutputStream,BufferedInputStream,BufferedOutputStream
- 黑马程序员---IO流(字节流InputStream、OutputStream)
- IO流反序列化(objectInputStream)和序列化(ObjectOutputStream)连续存储对象StreamCorruptedException
- JAVA学习笔记(二十八) - 字节流 InputStream & OutputStream
- 【IO流】DataOutputStream DataInputStream 数据输入输出流 用于读取二进制
- JAVA——字节流: InputStream /OutputStream
- 黑马程序员——Java IO—字节流—ObjectInputStream和ObjectOutputStream
- 字节流InputStream和OutputStream简单使用
- 【IO流】ObjectOutputStream,ObjectInputStream 对象的读写
- 牛客网Java刷题知识点之输入流、输出流、字节流、字符流、字节流的抽象基类(InputStream、OutputStream)、字符流的抽象基类(Reader、Writer)、FileWriter、FileReader
- Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)
- 黑马程序员--------java IO流 Reader、Writer、InputStream、OutputStream
- 黑马程序员:字节流与字符流的转换/ObjectOutputStream;ObjectInputStream
- I学霸官方免费教程四十二 :Java流之字节流 输入流和输出流 InputStream和OutputStream
- Java IO流-InputStream和OutputStream