JAVA学习日记:I/O流(2)

本节课我学习的主要内容有:

1.输入输出流的概念
2.输入输出流的层次结构

输入输出流的概念:

		date source -> input stream -> java program
  		java program -> output stream -> date sink/disk
  		是根据java program的进还是出来判断输入输出流。

输入输出流的层次结构:

		字节流:
  			字节输入输出流的顶层类是InputStream和OutputStream。
  			中存放的是字节的序列(byte)不是字符。
  			所以无论输入还是输出,处理的都是字节,都不用转码和解码。
  	
  				数据的读取/输出步骤:
  					标识数据源(文件,网络) -> 通过标识数据源建立输入流 -> 从输入流循环读取数据并操作数据 -> 关闭输入流。
  					标识数据源(文件,网络) -> 通过表示数据源建立输出流 -> 向输出流中循环写入数据  -> 关闭输出流。

InputOutputStreamTest01类(测试input和output):

package LessonForIO02;

import java.io.*;

public class InputOutputStreamTest01 
{
	public static void main(String[] args) 
	{
		//输入流写法一不自动关闭
		System.out.println(System.getProperty("user.dir"));
		
		File f1 = new File("D:\\workspace\\JDK8API\\Test02.txt");
		FileInputStream fis1 = null;
		try 
		{
			fis1 = new FileInputStream(f1);
			//	一次循环读取一个byte,所以我们循环读入,当读到-1时循环终止,字节也读到了最后一个
			byte content;
			while (fis1.read() != -1)
			{
				content = (byte)fis1.read();
				char _c = (char)content;
				System.out.print(_c);
			}
			
		} catch (IOException e) 
			{
				e.printStackTrace();
			} finally
				{
					try 
					{
						fis1.close();
					} catch (IOException e) 
						{
							e.printStackTrace();
						}
				}
		
		
		//输入流写法二自动关闭
		try (FileInputStream fis2 = new FileInputStream(f1);)
		{
			//	一次循环读取一个byte,所以我们循环读入,当读到-1时循环终止,字节也读到了最后一个
			byte content;
			while ((content = (byte)fis2.read()) != -1)
			{
				System.out.print((char)content);
			}
			
		} catch (IOException e) 
			{
				e.printStackTrace();
			} 
		
		//输出流自动关闭写法
		try (FileOutputStream fos1 = new FileOutputStream("Test03.txt");)
		{
			fos1.write("helloworld".getBytes());//如果该文件不存在他会帮助你创建。
		} catch (IOException e) 
			{
				e.printStackTrace();
			} 
	}
}

InputOutputStreamTest02类(测试文件拷贝):

package LessonForIO02;

import java.io.*;

public class InputOutputStreamTest02 
{
	public static void main(String[] args) 
	{
		//文件拷贝
		try (FileInputStream fis = new FileInputStream("Test03.txt");
				FileOutputStream fos = new FileOutputStream("Test04.txt");)
		{
			byte[] pool = new byte[512];//	自建缓冲区,一次写入512个字节效率会提高一点。
			int length;//记录已读取的字节长度。
			while ((length = fis.read(pool, 0, pool.length)) != -1)//开始copy,只要没有读到最后一位之后那就不会继续读入了。
			{
				System.out.println(length);
				fos.write(pool,0,length);//length此时被while中的条件初始化了。
			}
			
		} catch (IOException e)
			{
				e.printStackTrace();
			}
	}
}

本篇部分文字来源于:
咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
在这里十分感谢老师能够给我带来学习的激情。

2020.11.8
本文章是本人学习笔记,不进行任何商用所以不支持转载请理解!也请别拿去商用!
如果觉得对你有帮助那么欢迎你随时来回顾!
只为记录本人学习历程。
毕
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值