流的分类:
(一) 按字节分
1.字节流
- IpurStream,OutputStream
2.字符流
- Reader(BufferReader),Writer(BufferWriter)
(二)按方向分
1.输入流
- InputStream,Reader
2.输出流
- OutputStream.Writer
(三)按功能分
1.包装流(转换流)
- InputStreamReader,OutputStreamWriter
2.节点流
- 除了包装流都是节点流
重点:
1.高性能的包装流
- InputStreamReader/Writer
- BufferedReader/Writer
- URL:全球统一资源定位符(即我们常见的网址,可以理解为链接)
public class Text {
public static void main(String[] args) throws Exception {
URL url=new URL("http://www.baidu.com/");
InputStream is = url.openStream();// 字节流
InputStreamReader isr=newInputStreamReader(is,"UTF-8");
BufferedReader br=new BufferedReader(isr);
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
}
2.字节流拷贝(万能拷贝)
public class Text {
public static void main(String[] args) throws IOException{
copy();// 拷贝
}
private static void copy() throws IOException {
// 只适应于纯文本。
long currentTimeMillis = System.currentTimeMillis();
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("a.mp4"), "UTF-8"));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a1.mp4"),"UTF-8"));
String line=null;
while((line=br.readLine())!=null){
bw.write(line);
}
br.close();
bw.close();
System.out.println(System.currentTimeMillis()-currentTimeMillis);
}
}
2.Serialiable序列化(写到文件中,可以持久化)
- 序列化:将一个对象写到文件中的过程叫序列化。对象可序列化
- 反序列化:将一个对象从文件中读出的过程叫做反序列化。
- 反序列化有问题,单例模式(懒汉、饿汉式单利)只要经过反序列化就会被破坏-------->解决方案:重写 readResolve()方法
- SerialiableUID的用途:标识序列化版本(保证文件和类中一致)
3. 单例模式
- 懒汉式
- 饿汉式
- 枚举
- 正经单例
- 静态内部类