写数据的方式:
一次写一个字节
write(int by)
一次写一个字节数组的一部分
write(byte[] b, int off, int len)
(2)字节缓冲输入流
在使输入流的时候,
两种方式读取(一次读取一个字节/一次读取一个字节数在),只能用一种方式,否则,会出现错误!
(3)计算机如何存储中文的?
当前平台默认编码集 :GBK 一个中文两个字节
第一个字节:一定是负数
第二个字节:一般是负数,可能也会是正数,不会影响的结果.
(4)存储文件
IO流:永久存储(耗时)
数据库:永久存储
基本的字节流
文件字节输入流/文件字节输出流
高效的字节流(缓冲流)
StringBuffer:提供了一个字符串缓冲区 (可以在缓冲区中不断追加字符串)
(5)编码和解码
编码和解码:前后的编码格式要一致!
编码:
编码:
今---->字节---->二进制数据
解码:二进制数据-->十进制数据--->字节---->字符串
今
编码: 将字符串变成一个字节数组
解码:将字节数组--->字符串
public OutputStreamWriter(OutputStream out, Charset cs):使用指定编码格式构造一个字符转换输出流对象
转换流的构成=字节流+编码格式(平台默认/指定)
转换流的对象的创建,格式比较长,非常麻烦,Java--->转换流的便捷类
Reader:抽象类:字符输入流
便捷类:FileReader,这个类可以直接对文件进行操作
Writer:抽象类:字符输出流
*flush和close方法的区别?
(3)字符缓冲输出流:
*字符缓冲输入流:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;
/*
sequenceInputStream另一种构造方式
public SequenceInputStream(Enumeration e)
*/
public class SequenceInputStreamDemo2 {
public static void main(String[] args) throws IOException {
//StringDemo.java+SystemInDemo.java+PrintWriterDemo.java--->Copy.java文件中
//定义一个集合Vector
Vector<InputStream> v = new Vector<InputStream>() ;
//使用InputStream封装文件
InputStream s1 = new FileInputStream("StringDemo.java") ;
InputStream s2 = new FileInputStream("SystemInDemo.java") ;
InputStream s3 = new FileInputStream("PrintWriterDemo.java") ;
//将流对象添加到集合中
v.add(s1) ;
v.add(s2) ;
v.add(s3) ;
//特有功能
Enumeration<InputStream> en = v.elements() ;
//创建合并输入流对象
SequenceInputStream sis = new SequenceInputStream(en) ;
//创建字节缓冲输出流对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("Copy.java")) ;
//一次读取一个字节数组
byte[] bys = new byte[1024] ;
int len = 0 ;
while((len=sis.read(bys))!=-1) {
bos.write(bys, 0, len);
bos.flush();
}
//关闭资源
bos.close();
sis.close();
}
}
(5)标准的输入输出流
*jdk5以后,Java--->Scanner(InputStream in)
PrintStream ps = System.out ;
使用BufferedWriter 去包装System.out
(6)对象流
序列化:将对象按照流的方式存储到文本文件中或者再网络中传输 对象---->流数据 序列化流 (ObjectOutputStream)
反序列化:将文本文件中的流对象或者网络传输中的流对象还原成对象 流数据--->对象 反序列化流(ObjectInputStream)
java.io.NotSerializableException :当前类未实现序列化功能的异常
接口---->标记接口
自定义类要实现序列化功能,必须实现接口Serializable接口
(五)属性集合类
(1)Properties:表示了一个持久的属性集(简称:属性集合类) extends Hashtable<K,V> Map集合的
原文地址:http://blog.51cto.com/13670525/2119956