I/O流的小结

文件拷贝: 数据源 --程序-- 目的地

  • //1.选择流
  • 输入流 InputStream is=new FileInputStream(“D:/test.txt”);
  • 输出流 OutputStream os=new FileOutputStream(“E:/test.txt”);
  • //2.准备卡车
  • byte[] car=new byte[1024];
  • //3.读入写出
  • int len=-1; //读入到小卡车中数据的个数
  • while((len=is.read(car))!=-1){
  •  os.write(car,0,len);
    
  • }
  • //4.刷出
  • os.flush();
  • //5.关闭 先打开的后关闭
  • os.close();
  • is.close();

==========================================================================================

  • 字符流 :只能操作纯文本的内容 .txt .html 节点流 字符流
  • Reader 字符输入流 抽象类 FileReader 输入流
  •  read()| read(char[])	+ close()
    
  • Writer 字符输出流 抽象类 FileWriter 输出流

public class CharDemo01 {
public static void main(String[] args) throws IOException {
//1.选择流
Reader read=new FileReader(“D:/hehe.txt”);
//2.准备卡车
char[] car=new char[1024];
//3.读入
// System.out.println((char)(read.read()));
int len=-1;
while((len=read.read(car))!=-1){
System.out.println(new String(car,0,len));
}
//4.关闭
read.close();
}
}

Writer 字符输出流 抽象类 FileWriter 输出流

  •  FileWriter    write() | write(char[]) | append() +flush() + close()
    

*/
public class CharDemo02 {
public static void main(String[] args){
//1.选择流
Writer write=null;
try {
write=new FileWriter(“D:/heihei.txt”); //追加
//2.准备数据
String str=“千千阙歌”;
char[] arr={‘尚’,‘学’,‘堂’};
//3.写出
write.append(str);
write.write(arr);
//4.刷出
write.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(write!=null){
try {
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

==========================================================================================
/*

  • 功能流的一种:
  • 缓冲流:增强功能,提高性能
  • 使用:功能流(节点流)
  • 字节缓冲流:
  •  字节输入缓冲流   BufferedInputStream
    
  •  字节输出缓冲流   BufferedOutputStream
    
  •  无新增方法,可以发生多态
    

*/

package com.shsxt.buffered;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class BufferedInputStreamDemo {
public static void main(String[] args) {
//1.选择流
InputStream is=null;
OutputStream os=null;
try {
is=new BufferedInputStream(new FileInputStream(“D:/test.txt”));
os=new BufferedOutputStream(new FileOutputStream(“E:/dest.txt”));
//2.准备卡车
byte[] car=new byte[1024];
//3.读入写出
int len=-1; //读入到小卡车中数据的个数
while((len=is.read(car))!=-1){
os.write(car,0,len);
}
//4.刷出
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
//5.关闭 先打开的后关闭
try {
//多行添加try…catch=>alt+shift+z
if(os!=null){
os.close();
}
if(is!=null){
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

字符缓冲流

  • BufferedReader 新增方法 readLine() 读取一行
  • BufferedWriter 新增方法 newLine() 写出换行符
  • 不能发生多态,因为父类引用对子类新增方法不可见

转换流(了解)

  • 可以把字节流转为字符流使用
  • InputStreamReader(InputStream,String charset)
  • OutputSteamWriter(OutputSteam,String charset)
  • 可能出现乱码的情况:
  •  1.字符编码格式不统一
    
  •  2.缺少字节个数
    
  •    不同编码格式汉字所占字节大小:
    
  •    	ISO-8859-1  1个字节
    
  •      GBK			2个字节
    
  •      GB2312		2个字节
    
  •  	UTF-8   	3个字节
    

基本数据类型流 :读写带有基本数据类型的数据+String

  • 基本数据类型流(字节节点流)
  •  DataInputStream(InputStream):  新增方法: readXXX()
    
  •  DataOutputStream(OutputStream):  新增方法: writeXXX()
    
  • EOFException:文件存在,但是内部无法读取,不是源文件

序列化:将对象信息转为可存储或者可传输的信息格式

  • 对象流:
  • 序列化输出流 ObjectOutputStream
  • 反序列化输入流 ObjectInputStream
  • 新增方法 readXxx() writeXxx()
  • 先序列化后反序列化
  • 不是所有的类都能序列化 实现一个空接口 java.io.Serializable
  • 不是所有的属性都需要序列化 transient
  • 静态的内容不能被序列化 默认值
  • 如果父类实现了Serializable,子类中所有的内容都可以序列化
  • 如果子类实现Serializable,父类中的内容没有序列化能力,只有子类的内容有

猜你喜欢

转载自blog.csdn.net/PussyCatsss/article/details/91457563