黑马程序员----IO流(2)

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------


字符流的缓冲区
缓冲区的出现提高了对数据的读写效率。
对应类
BufferedWriter
BufferedReader
缓冲区要结合流才可以使用。
在流的基础上对流的功能进行了增强。


字节流
基本操作与字符流类相同
但它不仅可以操作字符,还可以操作其他 媒体文件



InputStreamReader,OutputStreamWriter
转换流的由来
字符流与字节流之间的桥梁
方便了字符流与字节流之间的操作
转换流的应用
字节流中的数据都是字符时,转成字符流操作更高效。


标准输入输出流
System类中的字段:in,out。
它们各代表了系统标准的输入和输出设备。
默认输入设备是键盘,输出设备是显示器。
System.in的类型是InputStream.
System.out的类型是PrintStream是OutputStream的子类FilterOutputStream 的子类.


标准输入输出流示例
例:获取键盘录入数据,然后将数据流向显示器,那么显示器就是目的地。
通过System类的setIn,setOut方法对默认设备进行改变。
System.setIn(new FileInputStream(“1.txt”));//将源改成文件1.txt。
System.setOut(new FileOutputStream(“2.txt”));//将目的改成文件2.txt
因为是字节流处理的是文本数据,可以转换成字符流,操作更方便。
BfferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw =
new BufferedWriter(new OutputStreamWriter(System.out));


流的基本应用小节
流是用来处理数据的。
处理数据时,一定要先明确数据源,与数据目的 地(数据汇)。
数据源可以是文件,可以是键盘。
数据目的地可以是文件、显示器或者其他设备。
而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理.转换处理等。

练习1:

/*
复制一个带行号的缓冲区对象
*/
import java.io.*;
class  Copy1
{
	public static void main(String[] args) 
	{
		lineCopy();
	}
	public static void lineCopy()
	{
		BufferedReader bufr = null;
		BufferedWriter bufw = null;
		LineNumberReader lnr= null;
		try
		{
			bufr = new BufferedReader(new FileReader("D:\\java1\\day13\\StringDemo.java"));
			bufw = new BufferedWriter(new FileWriter("G:\\copy_1.txt"));
			lnr = new LineNumberReader(bufr);


			String len = null;
			while ((len=lnr.readLine())!=null)
			{
				//System.out.println(lnr.getLineNumber()+":"+len);
				/*	*/
				bufw.write(lnr.getLineNumber()+":"+len);
				bufw.newLine();
				bufw.flush();
			
			}
		}
		catch (IOException e)
		{
			throw new RuntimeException("读写失败");
		}
		finally
		{
			try
			{
				if(bufw!=null)
					bufw.close();
				
			}
			catch (IOException e)
			{
				throw new RuntimeException("写关闭失败");
			}
			try
			{
				if(bufr!=null)
					bufr.close();
				
			}
			catch (IOException e)
			{
				throw new RuntimeException("读关闭失败");
			}
		}
	}
}
练习2:

/*
用字节流复制一个图片
*/
import java.io.*;
class  CopyPig
{
	public static void main(String[] args) 
	{
		copyPig();
	}
	public static void copyPig()
	{
		BufferedInputStream bufi = null;
		BufferedOutputStream bufo= null;
		try
		{
			bufi = new BufferedInputStream(new FileInputStream("c:\\1.jpg"));
			bufo = new BufferedOutputStream(new FileOutputStream("g:\\1.jpg"));

			int len = 0;

			while ((len=bufi.read())!=-1)
			{
				bufo.write(len);
			}
		}
		catch (IOException e)
		{
			throw new RuntimeException("读写失败");
		}
		finally
		{
			try
			{
				if(bufi!=null)
					bufi.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("读关闭失败");
			}
			try
			{
				if(bufo!=null)
					bufo.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("写关闭失败");
			}
		}
	}

}

练习3:

/*
当录入一段数据,就将这些数据打印出来
如果录入over,就停止录入
*/
import java.io.*;
class ReadIn 
{
	public static void main(String[] args) throws IOException
	{
		//ReadIn_1();
		ReadIn_2();

	}

	
		
	public static void ReadIn_1() throws IOException
	{
	
		InputStream in = System.in;
		StringBuilder sb = new StringBuilder();
			

			int ch = 0;
			while((ch=in.read())!=-1)
			{
				if(ch=='\r')
					continue;
				if(ch=='\n')
				{
					
					String s = sb.toString();
					if("over".equals(s))
						break;
					System.out.println(s);

					sb.delete(0,sb.length());
				
				}
				else
					sb.append((char)ch);


			}
		}

	public static void ReadIn_2() throws IOException
	{
		//创建一个键盘录入对象
		InputStream in = System.in;
		//将字节流转换成字符流对象,用InputStreamReader
		InputStreamReader isr = new InputStreamReader(in);
		//为了高效,将字符串进行缓冲区技术高效操作,用BufferedReader
		BufferedReader bufr = new BufferedReader(isr);

	//	BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));    这是一个用流键盘输入的方式,最为常用


		String line = null;
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			System.out.println(line.toUpperCase());
		}
	}
	
}

/*
流操作的基本规律:
最痛苦的就是流对象有很多,不知道该用哪一个。

通过三个明确来完成。

1,明确源和目的
	源:输入流  InputStream Reader
	目的:输出流  OutputStream Writer
2,操作的数据是否是纯文本
	是,字符流
	不是,字节流
3,当体系明确后,在明确要使用哪个具体的对象。
	通过设备来进行区分:
	源设备:内存,硬盘,键盘
	目的设备:内存,硬盘,控制台。
*/



---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值