JAVA——IO流 篇五

关于流的转换主要涉及到的类是InputStreamReader字节流到字符流的桥梁,它读取字节,并使用指定的charset将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。 OutputStreamWriter字符流到字节流的桥梁,使用指定的字符集将写入其中的字符编码为字节。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。
JAVA——IO流 篇四简单的提到过流的转换,通过标准输入流读取字节转换为字符流,结合上面的例程,我们也可以添加输出流的转换,将读取到的字符流转换成字节流,在进行输出。

	public static void readKeyOver() throws IOException 
	{
		//获取标准输入流对象(获取键盘输入内容)
		InputStream in = System.in;
		//将输入字节流转化为输入字符流对象
		InputStreamReader inputStreamReader = new InputStreamReader(in);
		//创建输入字符流缓冲区对象
		BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
		
		//获取标准输出流对象
		PrintStream out = System.out;
		//将输出字符流装换成输出字节流对象
		OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out);
		//创建字符流缓冲区
		BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
		
		String lineString;
		//读取输入的每一行数据
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判断每行的数据是否为over
			if(lineString.equals("over")) 
			{
				break;//跳出循环
			}
			//将字符数据写入字符缓冲区
			bufferedWriter.write(lineString);
			//换行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

上述代码经分析,其流程如下所示:
代码分析流程图
将上述代码在进一步的封装:

	public static void readKeyOver() throws IOException 
	{
		//输入流缓冲区对象		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		//输出流缓冲区对象
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
		String lineString;
		//读取输入的每一行数据
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判断每行的数据是否为over
			if(lineString.equals("over")) 
			{
				break;//跳出循环
			}
			//将字符数据写入字符缓冲区
			bufferedWriter.write(lineString);
			//换行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

则可进行高质量的复用,如下所示:
将键盘路的的数据写入一个文件中

public static void readKeyOver() throws IOException 
	{
		//输入流缓冲区对象		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		//输出流缓冲区对象
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt")));
		String lineString;
		//读取输入的每一行数据
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判断每行的数据是否为over
			if(lineString.equals("over")) 
			{
				break;//跳出循环
			}
			//将字符数据写入字符缓冲区
			bufferedWriter.write(lineString);
			//换行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

将一个文本文件内容显示在控制台上

	public static void readKeyOver() throws IOException 
	{
		//输入流缓冲区对象		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
		//输出流缓冲区对象
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
		String lineString;
		//读取输入的每一行数据
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判断每行的数据是否为over
			if(lineString.equals("over")) 
			{
				break;//跳出循环
			}
			//将字符数据写入字符缓冲区
			bufferedWriter.write(lineString);
			//换行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

将一个文件总的内容复制到另一个文件中

	public static void readKeyOver() throws IOException 
	{
		//输入流缓冲区对象		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
		//输出流缓冲区对象
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));
		String lineString;
		//读取输入的每一行数据
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判断每行的数据是否为over
			if(lineString.equals("over")) 
			{
				break;//跳出循环
			}
			//将字符数据写入字符缓冲区
			bufferedWriter.write(lineString);
			//换行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

通过例程可知,操作流是具有一定的规律性:
总结其规律如下:

  1. 明确源和目的
            源:     Reader      InputStream
            目的:    Writer     OutputStream
    
  2. 明确数据是否是纯文本数据
     	 源:    是         Reader
    	         否	        InputStream
         目的:  是         Writer
    	         否	        OutputStream
    
  3. 明确具体的设备
          源设备:
                  硬盘:File
                  键盘:System.in
                  内存:数组
                  网络:Socket流
          目的设备:
           		 硬盘:File
                  控制台:System.out
                  内存:数组
                  网络:Socket流
    
  4. 是否需要其他额外功能(比较繁多)		
     		1.是否需要高效(缓冲区):     
     				是:			加入 buffer
     		……   ……    ……
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值