黑马程序员——IO(字节流)


-----------android培训java培训、java学习型技术博客、期待与您交流!------------

字节流:

InputStream(读)

OutputStream(写)

用途,不操作文本(需要码表转换),操作图片类型的字节文件。也就是操作字节数据。


字符流使用的是字符数组。

字节流使用的是字节数组。


字节流在没有使用缓冲区时,不需要刷新动作,读一个字节写一个字节。


int available()   返回目标文件字符大小。

byte[] buf = new byte[fis.available()];//定义一个刚刚好的缓冲区。注:数据不能太大。

byte[] buf = new byte[1024];//主要的缓冲区定义方式。


字节流读写操作示例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class InputStreamDemo {

	public static void main(String[] args) throws IOException 
	{
		output();
		input();
	}
	//写数据
	public static void output() throws IOException
	{
		String str = "abcdefg";
		//定义写字符流
		FileOutputStream fos = new FileOutputStream("test.txt");
		fos.write(str.getBytes());
		fos.close();
	}
	//读数据
	public static void input() throws IOException
	{
		//定义读字符流
		FileInputStream fis = new FileInputStream("test.txt");
		byte[] by = new byte[1024];
		int len =0;
		while((len=fis.read(by))!=-1)
			System.out.print(new String(by,0,len));
		fis.close();
	}
}

读的关键部分:

byte[] by = new byte[1024];//定义缓冲区
int len =0;
while((len=fis.read(by))!=-1)
System.out.print(new String(by,0,len));//将字节流转换从字符串打印

练习:复制图片

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;




public class CopyPic {

	public static void main(String[] args) throws IOException {
		//写
		FileOutputStream fos = new FileOutputStream("阳懿1.jpg");
		//读
		FileInputStream fis = new FileInputStream("F:\\照片\\阳懿_11.jpg");
		
		byte[] buf = new byte[1024];
		int len1 = fis.available()/2;
		int len = 0;
		int sum = 0;
		while((len=fis.read(buf))!=-1)
		{
			fos.write(buf, 0, len);
			sum +=len;
			if(sum>=len1)
				break;
		}
			
		
		fis.close();
		fos.close();

	}

}

用BufferedInputStream和BufferedOutputStream复制mp3文件

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;




public class CopyMp3 {

	public static void main(String[] args) throws IOException 
	{
		FileInputStream fis = new FileInputStream("F:\\音乐\\漂洋过海来看你.mp3");
        BufferedInputStream bis = new BufferedInputStream(fis);
        
        FileOutputStream fos = new FileOutputStream("漂洋过海来看你.mp3");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        
        long start = System.currentTimeMillis();
        byte[] by = new byte[1024];
        int len = 0;
        while((len = bis.read(by))!=-1)
        {
        	bos.write(by,0,len);
        	//bos.write(len);
        }
        bis.close();
        bos.close();
        
        long end = System.currentTimeMillis();
        
        System.out.println(end - start + "毫秒");
        
        
        
	}

}


需求:
读取键盘录入。

import java.io.BufferedInputStream;
import java.io.IOException;


public class SystemInDemo {

	public static void main(String[] args) throws IOException 
	{
		BufferedInputStream bi = null;
		
		byte[] by = new byte[1024];
		while(true)
		{
			bi = new BufferedInputStream(System.in);
			bi.read(by);
			System.out.println(new String(by).toString());
		}
	}

}

InputStreamReader:字节流通向字符流的桥梁。

构造时必须传入一个字节流。

简化形式:键盘录入。

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

OutputStreamWriter:字符流转向字节流的桥梁。

字符输出到控制台。

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));


流操作的基本规律:

流对象比较多,必须明确用哪个。


1、明确源和目的。

源:输入流。   InputStream    Reader

目的:输出流。OutputStream   Writer

2、操作的数据是否是纯文本。

是:字符流。

不是:字节流。

3、当体系明确后,在明确要使用哪个具体的对象。

通过设备来区分:

源设备:内存,硬盘,键盘

目的设备:内存,硬盘,控制台。


扩展:

把录入的数据按照指定的编码表(utf-8),将数据存入文件中。FileWriter等流默认的码表为GBK。

OutputStreamWriter。可以用指定的码表写入文件。

转换流的由来,码表的选择。


System.setIn();改变System.in的指定设备。

System.setOut();改变System.out的指定设备。



-----------android培训java培训、java学习型技术博客、期待与您交流!------------






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值