现总结如下:
字节流是功能最强大的流,具有最好的通用性,能传输任意格式的文件。由于字节流每次传输的数据大小是以字节为单位的,所以容易出现乱码。
不带缓存的文件字节输入流:
private static void m4() throws IOException {
InputStream in = new FileInputStream("E:/aaa.txt");
byte [] b = new byte [4096];
in.read(b);
String str = new String(b);
System.out.println(str);
in.close();
}
文件字节流是可以带缓存的,一般带缓存的流效率更高,CPU占用率较低。并且在java中使用带缓存的输入流还有更多的方法可以被调用,所以在实际开发中一般多用带缓存的文件字节输入流。
带缓存的文件字节输入流:
private static void m2() throws IOException {
InputStream in new FileInputStream("E:/saaa.txt"); BufferedInputStream bin = new BufferedInputStream(in); byte [] b = new byte [4096]; bin.read(b); String str = new String(b); System.out.println(str); bin.close(); in.close(); }
对象流又称为对象的序列化,对象字节输入流的作用是将存储在硬盘上的java对象读取出来,并保存到内存中,等同于在内存中创建一个对象的副本。这个副本与我们在代码中创建的对象不一样的地方在于这个对象中可能已经存储了一些初始化以外的信息。在java处理一些特殊任务的时候可能将一个堆中已经存在的对象保存到硬盘中。对象字节流的作用就是将存到硬盘中的对象取出来重新使用。存储对象与取对象的java代码可以不是同一个,甚至可以不再一个平台。
对象输入字节流:
private static void m2() throws IOException, Exception {
InputStream in = new FileInputStream("e:/out.tmp");
ObjectInput ois = new ObjectInputStream(in);
Stu s = (Stu) ois.readObject();
System.out.println(s.toString());
ois.close();
in.close();
}
对象字节输入流还没有发现可以带缓存,可能是我孤陋寡闻,如果有待以后补充。
private void m3() throws IOException {
OutputStream out = new FileOutputStream("aaa.txt");
byte [] buffer = "hello world".getBytes();
out.write(buffer);
out.close();
}
带缓存的文件字节输出流:
private static void m1() throws IOException {
OutputStream out = new FileOutputStream("E:/aaa.txt");
BufferedOutputStream bout = new BufferedOutputStream(out);
byte[] b = "hello world".getBytes();
bout.write(b);
bout.close();
out.close();
}
我们看到,在文件字符流中带缓存的字节流只需要一个带缓存的流对输入输出流进行包装就可以了,在操作流的时候只需要使用带缓存的流就能完成输入输出
流的操作,并且带缓存的字节流还自己包装了一些方法。
对象字节输出流是将当前程序中已有的对象输出到文件,输出到硬盘的对象跟当前程序中的对象是一样的。这种技术可以将本程序中的对象保存到硬盘供其他程序调用,或者作为一个备份。当下次程序启动的时候可以读取这个对象,这个对象保存了上次执行时保留的结果。
对象字节输出流:
private static void m1() throws IOException {
OutputStream out = new FileOutputStream("e:/out.tmp");
ObjectOutput oot = new ObjectOutputStream(out);
oot.writeObject(new Stu(11,"mmass"));
oot.close();
out.close();
}
private static void m5() throws IOException {
Reader read = new FileReader("E:/test.txt");
char[] buffer = new char[4069];
read.read(buffer);
String str = new String(buffer);
System.out.println(str);
read.close();
}
private static void m6() throws IOException {
Reader read = new FileReader("E:/test.txt");
BufferedReader br = new BufferedReader(read);
char[] buffer = new char[4069];
while(br.read(buffer) != -1){
String str = new String(buffer);
System.out.println(str);
}
br.close();
read.close();
}
private static void m7() throws IOException {
Writer write = new FileWriter("E:/test.txt",true);
write.write("hello");
write.close();
}
private static void m8() throws IOException {
Writer wr = new FileWriter("E:/test.txt",true);//追加模式
BufferedWriter bwr = new BufferedWriter(wr);
bwr.write("hello");
bwr.close();
wr.close();
}