彻底攻克java流
类图1:
IO分两种流
字节流 InputStream OutputStream
字符流 Reader Writer
他们都是抽象类
具体实现
字节流 FileInputStream FileOutputStream
字符流 FileReader FileWriter
字节流转换成字符流可以用 InputSteamReader OutputStreamWriter
转换成BufferdReader BufferedWriter 他们具有缓冲区
例如:读取文件 从字节流输入到字符流输入
定义一个字节流:
FileInputStream fileInputStream = new FileInputStream("d:/text.txt"); // 定义一个指向D:/TEXT.TXT 的字节流InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);//字节流转换成InputStreamReaderBufferedReader bufferedReader = new BufferedReader(inputSteamReader);//InputStreamReader 转换成带缓存的bufferedReader
String ss = new String();String s;while((s = bufferedReader.readLine())!=null){ss += s;}
FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt"); //定义一个指向D:/TEXT.TXT文件 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);bufferedWriter.write(s);bufferedWriter.close();outputStreamWriter.close();fileOutputStream.close();
package demo;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class ObjectStreamTest{ public static void main(String[] args) { T t = new T(); t.k = 15; try { FileOutputStream fos = new FileOutputStream("d:/333.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(t); fos.close(); oos.close(); } catch (IOException e) { e.printStackTrace(); } try { FileInputStream fis = new FileInputStream("d:/333.txt"); ObjectInputStream ois = new ObjectInputStream(fis); T t2 = (T) ois.readObject(); System.out.println(t2.i); System.out.println(t2.k); System.out.println(t2.s); System.out.println(t2.j); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }}@SuppressWarnings("all")class T implements Serializable{ int i = 20; short j = 10; String s = "hello"; int k = 100;}
package demo;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;public class DataStreamTest{ public static void main(String[] args) { //ByteArrayOutputStream可以临时缓存一个对象的字节数组 ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); try { dos.writeChar('d'); dos.writeInt(10); dos.writeShort(50); } catch (IOException e) { e.printStackTrace(); } ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());//ByteArrayOutputStream的用法 DataInputStream dis = new DataInputStream(bais); try { System.out.println(dis.available()); System.out.println(dis.readChar()); System.out.println(dis.readInt()); System.out.println(dis.readShort()); } catch (IOException e) { e.printStackTrace(); } try { dos.close(); dis.close(); } catch (IOException e) { e.printStackTrace(); } }}
package demo;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class BufferedStreamDemo{ public static final void copy(File srcFile, File distFile) throws IOException { FileInputStream fin = null; BufferedInputStream bis = null; FileOutputStream fout = null; BufferedOutputStream bos = null; try { if (distFile.exists()) { distFile.delete(); } byte[] data = new byte[1024]; fin = new FileInputStream(srcFile); bis = new BufferedInputStream(fin); fout = new FileOutputStream(distFile); bos = new BufferedOutputStream(fout); int readCount = 0; while ((readCount = bis.read(data)) != -1) { bos.write(data, 0, readCount); } // 将缓冲区中的数据全部写出 bos.flush(); } finally { try { if (bos != null) { bos.close(); } } catch (IOException e) { } try { if (bis != null) { bis.close(); } } catch (IOException e) { } try { if (fin != null) { fin.close(); } } catch (IOException e) { } try { if (fout != null) { fout.close(); } } catch (IOException e) { } } } public static void main(String[] args) { try { BufferedStreamDemo.copy(new File("c:\\test1.abs"), new File("c:\\test2.abs")); } catch (IOException e) { e.printStackTrace(); } }}
package demo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class InputStreamReaderTest{ public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("d:/222.txt"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr);// 这里又用BufferedReader封装起来,其实就是为了可以使用它的ReadLine方法 FileOutputStream fos = new FileOutputStream("d:/555.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw);// 这里同样的用BufferedWriter封装起来,就是为了可以使用它的writer(String )方法..可以看API,其他的都只能write Int类型的数据或者byte类型的 String s2 = null; while ((s2 = br.readLine()) != null) { bw.write(s2); bw.newLine(); } bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } }}
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据int rc = 0;while ((rc = inStream.read(buff, 0, 100)) > 0) {swapStream.write(buff, 0, rc);}byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果
package demo;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.ArrayList;public class WriteObject{ public static void main(String[] args) { ArrayList<String> al = new java.util.ArrayList<String>(); al.add("a"); al.add("b"); al.add("c"); try { ByteArrayOutputStream stream = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(stream); out.writeObject(al); byte[] alBytes = stream.toByteArray(); ArrayList<String> all = (ArrayList<String>) new ObjectInputStream(new ByteArrayInputStream(alBytes)).readObject(); for (String s : all) { System.out.println(s); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}