Core Java——IO流的分类
来源:互联网 发布:kuka机器人编程语言 编辑:程序博客网 时间:2024/05/18 15:05
一:IO流的分类
1:从方向上分:输入流 / 输出流
2:从处理的单元上分:字节流 / 字符流
3:从处理的效率(介质):节点流 / 处理流
二:流类基本结构:
三:一般操作文件流的步骤:
1:使用File类来找到一个文件
2:通过File类的对象去实例化字节流或者字符流的子类
3:进行字节流或者字符流的读写操作
4:关闭文件流
四:System.in和System.out
为了支持标准输入输出设备,java定义了两个特殊的流对象;System.in和System.out.
System.in:对应键盘;属于InputStream类型;使用它可以读取键盘上输入的数据。Scanner s=new Scanner(System.in)
System.out:对应显示器;属于PrintStream类型;PrintStream是OutputStream的一个子类,使用它可以将数据输出到显示器上。
五:打印流:PrintWriter
PrintWriter类(高级流)。
例1:向显示器上输出
public class PrintWriterDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
PrintWriter out = null;
// 通过System.out对PrintWriter实例化
out = new PrintWriter(System.out);
// 输出字符
out.print("Hello World!!");
out.close();
}
}
例2:向文件中输出
public class PrintWriterTest {
public static void main(String[] args) throws IOException {
PrintWriter out=null;
File file = new File("D:\\file\\my1108.txt");
//通过FileWriter实例化的out,所以out就就具备了向文件输出的能力
out=new PrintWriter(file);
//由FileWriter实例化,所以向文件中输出
out.print("你好!!");
out.close();
}
}
六:字节流和字符流之间的转换
1:InputStreamReader:用于将一个字节流中的字节转化成为字符流
2:OutputStreamWriter:用于将写入的字符转化成为字节后写入一个字节流中
注意:为了避免频繁的进行字符与字节之间的相互转化,最好不要直接使用这两个类来进行读写,而尽量使用BufferedReader来包装InputStreamReader和BufferedWriter来包装OutputStreamWriter
包装的过程:
//读取从键盘上输入的内容
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
//向显示器或者控制台输出
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out));
实例1:
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String str=in.readLine();
out.write(str);
out.flush();
七:对象序列化:
对象序列化:是指将对象转换为二进制数据流的一种手段。通过将对象序列化,可以方便的实现对象的传输和保存。
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
把Java对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为Java对象的过程称为对象的反序列化。
JDK类库中的序列化API
java.io.ObjectOutputStream:代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
java.io.ObjectInputStream:代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
只有实现了Serializable接口的类的对象才能被序列化。
对象序列化包括如下步骤:
1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;
2) 通过对象输出流的writeObject(Object obj)方法写对象。
对象反序列化的步骤如下:
1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;
2) 通过对象输入流的readObject()方法读取对象。
实现Serializable接口
ObjectOutputStream只能对Serializable接口的类的对象进行序列化。默认情况下,ObjectOutputStream按照默认方式序列化,这种序列化方式仅仅对对象的非transient的实例变量进行序列化,而不会序列化对象的transient的实例变量,也不会序列化静态变量。
如果某个属性不想被序列化,那么就要使用transient来修饰此属性。
例:
public class Person implements Serializable{
private Stringname ;
privateintage ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return"姓名:"+this.name+",年龄:"+this.age ;
}
}
public class SerializableDemo{
public static void main( String args[] )throws Exception{
File f = newFile("SerializedPerson.txt") ;
//serialize(f);
deserialize(f);
}
// 以下方法为序列化对象方法
//public static void serialize(File f) throws Exception
//{
//OutputStream outputFile = new FileOutputStream(f);
//ObjectOutputStreamcout = new ObjectOutputStream(outputFile);
//cout.writeObject(new Person("张三",25));
//cout.writeObject(new Person("李四",27));
//cout.close();
//}
// 以下方法为反序列化对象方法
public static void deserialize(File f)throws Exception{
InputStreaminputFile =newFileInputStream(f);
ObjectInputStreamcin =newObjectInputStream(inputFile);
Person p = (Person) cin.readObject();
System.out.println(p);
Person p1 = (Person) cin.readObject();
System.out.println(p1);
}
}
- Core Java——IO流的分类
- Java笔记——IO流分类
- Java IO系统——IO流分类说明
- java IO流的分类和操作
- Java的IO流总结分类
- java IO流的概念与分类
- java IO流的分类和操作
- java基础io流的分类
- java IO流的概念与分类
- Java中IO流的分类
- Java基础进阶——“Java IO流之二:细说流的分类”
- IO流的分类
- IO流的分类
- Java IO流分类整理
- java中的IO流分类
- IO流学习笔记2——流的分类
- 黑马程序员——关于IO流的分类整理
- java IO流相关的类的分类和总结
- spring boot
- input file 没有name属性,后台不能取得Files
- oracle 复制表结构和数据
- 关于Java日志的注意事项
- 边缘博客_电脑使用出错集合及解决方案
- Core Java——IO流的分类
- linux软件安装管理
- 避免过拟合问题——正则化
- equalsIgnoreCase()和equals()两者区别
- VirtualBox
- JMS(一)--JMS基本概念
- Ubuntu16.04 Python 3.6安装Pytorch 0.2
- 欢迎使用CSDN-markdown编辑器
- php接口获取不到移动端访问的数据