本节课我学习的主要内容有:
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
本文章是本人学习笔记,不进行任何商用所以不支持转载请理解!也请别拿去商用!
如果觉得对你有帮助那么欢迎你随时来回顾!
只为记录本人学习历程。
毕