JavaIO流知识点总结

知识点

package IO流原理与概念;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.Reader;

/**

  • 一,概念

    • 流,流动,流向从一端移动到另一端,源头与目的地
    • 以程序为中心
  • 二,IO流分类

    • 1,流向,输入流和输出流
    • 2,按数据
    • 字节流:二进制,一切文件,包括纯文本 doc 音频 视频
    • 字符流: 文本文件,只能处理纯文本
  • 3,功能

    • 节点:包裹源头
    • 处理:增加功能
  • 三,字符流和字节流《重点》

    • 1,字节流
    • 输入流:InputStream
      read(byte[] b)
      从输入流读取一些字节数,并将它们存储到缓冲区 b 。
      read(byte[] b, int off, int len)
      从输入流读取最多 len字节的数据到一个字节数组。

    close()
    关闭此输入流并释放与流相关联的任何系统资源。

  • 输出流:OutputStream
    write(byte[] b)
    将 b.length字节从指定的字节数组写入此输出流。
    write(byte[] b, int off, int len)
    从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。
    write(int b)
    将指定的字节写入此输出流。

    flush()
    刷新此输出流并强制任何缓冲的输出字节被写出。

    close()
    关闭此输出流并释放与此流相关联的任何系统资源。

  • 2,字符流

  • 输入流:Reader

    read(char[] cbuf)
    将字符读入数组。
    read(char[] cbuf, int off, int len)
    将字符读入数组的一部分。

    close()
    关闭流并释放与之相关联的任何系统资源。

    • 输出流:Writer

    write(char[] cbuf)
    写入一个字符数组。
    write(char[] cbuf, int off, int len)
    写入字符数组的一部分。

    flush()
    刷新流。

    close()
    关闭流,先刷新。

*四,操作
*1,举例:搬家
1,关联房子—建立与文件的联系
2,选择搬家—选择对应的流
3,搬家
a,卡车大小—数组大小
b,运输—读取或者写出
4,打发over—释放资源
*2,操作
1,建立联系
2,选择流
3,操作数组大小,read,write

处理流:增强功能,提供性能,节点流之上,对节点流的包装
一,缓存流
1,字节缓存流
BufferedInputStream
BufferedOutputStream
2,字符缓存流
BufferedReader
新增方法 readline()
BufferedWriter
新增方法 newLine()

二,转换流,字节流转换为字符流,处理乱码(编码集,解码集)
1,编码与解码的概念
	编码: 字符---编码字符集-》二进制
	解码: 二进制-解码字符集-》 字符
2,乱码
	1,编码与解码字符集不统一
	2,字节缺少,长度流失
3,转换流,字节转换为字符
	1,输出流
		OutputStreamWriter 编码
	2,输入流
		InputStreanReader 解码

节点流
1,字节数组
输入流ByteArrayInputStream
方法
read(byte[] b, int off, int len)
将 len字节的数据读入此输入流中的字节数组。

	输出流ByteArrayOutputStream
		方法
		write(byte[] b, int off, int len) 
		从指定的字节数组写入 len字节,从偏移量为 off开始,输出到这个字节数组输出流。 
		
		toByteArray() 新增方法不能使用多态
		创建一个新分配的字节数组。 

处理流
1,基本类型+String 保留数据+类型
输入流:
DataInputStream
方法
readXxx

	输出流:
	DataOutputStream
		方法
		writeXxx
2,引用类型(对象)保留数据+类型
	反序列化 输入流ObjectInputStream
		readObject()
	序列化 输出流ObjectOutputStream
		writeObject()
		
	注意:
		反序列化与序列化顺序必须一致
		先序列化,后反序列化
		不是所有的对象都可以序列化,必须实现java.io.Serializable接口
		不是所有属性都需要序列化,不需要序列化的属性要用,transient定义

类与类之间的关系
1,依赖:形参 :局部变量
2,关联:属性
聚合:属性 整体与部分 不一致的生命周期,人和手
组合:属性 整体与部分 一致的生命周期,人和大脑
3,继承:父子类的关系
4,实现:接口和实现类的关系

超长文件夹的删除
使用robocopy密令
robocopy /MIR d:\teacher\t d:\teacher\aa
d:\teacher\t 空文件夹
d:\teacher\aa 超长文件夹
把前一个文件夹中内容复制到第二个文件夹中
可以操作超长文件夹
把空文件夹复制到超长文件夹,相当于把吧超长文件夹清空

io流的总结
一,步骤
创建流 选择流–读取-写出 释放
二,流
节点流–离数据源最近的
1,字节流–可以处理一切
输入流
{@link InputStream}
{@link FileInputStream}
{@link ByteArrayInputStream}
操作
1,中间容器byte[] car=new byte[1024];
2,接受长度int len=0;
3,循环读取while(-1!=(len=流.read(car))){ }
4,输出拷贝
输出流
{@link OutputStream}
{@link FileOutputStream}
{@link ByteArrayOutputStream}
操作
write(字节数组,0,长度)
2,字符流—只能处理纯文本
输入流
{@link Reader}
{@link FileReader}

				操作
					1,中间容器char[] car=new char[1024];
					2,接受长度int len=0; 
					3,循环读取while(-1!=(len=流.read(car))){ }
					4,输出拷贝
			输出流
				{@link Writer}
				{@link FileWriter}
				
				操作
					write(字符数组,0,长度)
	处理流--装饰模式,为了提高性能,方便处理
		1,转换流,解码与编码的字符问题
			输入流
				{@link InputStreamReader}-->解码
			输出流
				{@link OutputStreamWriter}--》编码
		2,缓存流 提高性能
			输入流
				{@link BufferedInputStream}
				{@link BufferedReader}
			输出流
				{@link BufferedOutputStream}
				{@link BufferedWriter}
		3,处理类型
			基本类型+字符串
				输入流	
					{@link DataInputStream}
					方法
						readXxx()
				输出流
					{@link DataOutputStream}
					方法
						writeXxx()
				读入和写出顺序要一致,存在才能读取
			引用类型--序列化和反序列化,必须实现Serializable接口,用transient声明的属性才会序列化
				输入流--反序列化
					{@link ObjectInputStream}
						readObject
				输出流--序列化
					{@link ObjectOutputStream}
						writeObject
		4,打印流
			{@link PrintStream}
			System in out err
			setIn setOut setErr
		5,以下流使用新增方法,不能使用多态
			{@link ByteArrayOutputStream}--toByteArray()
			{@link BufferedReader}--readLine()
			{@link BufferedWriter}--newLine()
			{@link DataOutputStream}
			{@link DataInputStream}
			{@link ObjectOutputStream}
			{@link ObjectInputStream}
			{@link PrintStream}

*/

你可能感兴趣的:(Java)