标签:tab 缓冲 序列化 数据流 属性 source 手动 str 否则
流:数据传输通道
模型:采用Decorator装饰者模式。依照功能可以对流进行分类。
按数据流方向:
按传输类型:
这4种均是抽象流,为所有IO流的超类
字符字节流区别:
字节输出流没有缓冲区,直接输出,字符流必须经过缓冲区,正常情况下只有调用close()才会输出,否则需要手动调用flush()才可输出
字节 | 字符 | |
---|---|---|
读写单位 | Byte | 字符(根据码表映射) |
处理对象 | 视频,图片 | 纯文本(优先考虑) |
按功能:
字符流:Java中采用Unicode标准,字符流指基于字节流读取查询对应的Unicode表。
Java.io包:
类
File:文件特征与管理,对文件系统中文件以及文件夹进行封装的对象,可通过对象的思想操作文件和文件夹,保存文件或目录的元数据信息,包括文件名,文件大小,最后修改时间,是否可读,获取文件路径,判断文件是否存在,获取当前文件列表,创建/删除文件或目录
InputStream
OutputStream
Reader
Writer
RandomAccessFile:随机文件操作
接口:Serializable
输入输出 | 读取方式 |
---|---|
System.out(标准输出) | 显示器 |
System.err(标准错误输出) | 显示器 |
System.in(标准输入) | 键盘输入 |
//字节流套接
Scanner(InputStream source)
//字符流套接
Scanner(Readable source)
序列化:具体对象数据 --> 二进制数据
反序列化:二进制数据 --> 具体对象数据
基本类型和String默认都实现了这个接口,所以不需要处理。
类中的一个属性不参与序列化:transient,表示标记的属性不参与序列化。
transient关键字:某些属性不需要保存。
private transient String name;
static定义的变量也不参与序列化。
标记接口:Serializable,Cloneable.
只定义了一种功能,没有具体内容。它的功能由JVM实现。
输入流 | 输出流 | |
---|---|---|
字节流 | Scanner(首选) | printStream(打印流) |
字符流 | BufferReader(次选,缓冲流) | printWriter(打印流) |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BRRead {
//单字符读写
public static void main(String[] args) throws IOException {
char c;
//使用System.in创建BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入‘q‘退出:");
/*读取:读取一个字符使用read()方法
int read() throws IOException
*/
do{
c = (char)br.read();
System.out.println("退出");
}while(c != ‘q‘);
}
}
字符串
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BRReadLine {
//多字符读取
public static void main(String[] args) throws IOException {
String str;
//System.in创建BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一行字符如‘end‘来结束");
/*读取一行字符
String readLine() throws IOException
*/
do{
str = br.readLine();
System.out.println("您输入了一行字符,已退出");
}while(!str.equals("end"));
}
}
FileInputStream
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Fileinputstream {
public static void main(String[] args) throws IOException {
int i = 0;
FileInputStream fi = null;
try {
fi = new FileInputStream("C:\\Users\\Administrator\\Desktop\\a.txt");
} catch (FileNotFoundException e) {
System.out.println("找不到文件");
System.exit(-1);
}
try {
int num = 0;//计数
while((i=fi.read()) != -1){
System.out.println((char)i);
num++;
}
fi.close();
System.out.println("传输个数:"+num);
} catch (IOException e) {
System.out.println("读取文件错误");
}
}
}
FileOutputStream
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Fileoutputstream {
public static void main(String[] args) throws IOException {
int i = 0;
FileInputStream fi = null;
FileOutputStream fo = null;
try {
fi = new FileInputStream("C:\\Users\\Administrator\\Desktop\\a.txt");
fo = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\b.txt");
while((i=fi.read())!=-1){
fo.write(i);
System.out.println((char)i);
}
fi.close();
fo.close();
System.out.println("文件已复制");
} catch (IOException e) {
System.out.println("文件复制错误");
System.exit(-1);
}
}
}
Reader,Writer
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Filereaderwriter {
public static void main(String[] args) throws IOException {
int i = 0;
try {
FileReader fr = new FileReader("C:\\Users\\Administrator\\Desktop\\a.txt");
FileWriter fw = new FileWriter("C:\\Users\\Administrator\\Desktop\\c.txt");
while((i=fr.read())!=-1){
fw.write(i);
System.out.println((char)i);
}
fr.close();
fw.close();
} catch (IOException e) {
System.out.println("文件复制错误");
}
}
}
标签:tab 缓冲 序列化 数据流 属性 source 手动 str 否则
原文地址:https://www.cnblogs.com/bwxx/p/13174450.html