基础概念:https://www.cnblogs.com/xll1025/p/6418766.html
1.字节流
InputStream 输入流 读取 使用https://www.cnblogs.com/kongxianghao/articles/6879367.html
OutputStream 输出流 写入 使用:http://www.cnblogs.com/kongxianghao/articles/6879402.html
2.字符流
Reader 读取 使用:https://www.cnblogs.com/kongxianghao/articles/6879426.html
Writer 写入 使用:http://www.cnblogs.com/kongxianghao/articles/6879446.html
3.文件操作字节流和字符流
讨论:1.字节流和字符流的区别:
字节流直接写入内存,字符流写入缓冲,不close和flush不会被存储,写入文件操作,flush和close的区别是,flush之后还可以write,close之后不可以写入
2.网络请求交互字节流 ,如何处理,文件类型,正常的数据流反序列话如何处理?
通常请求网络,网络给的数据都是以流的形式,客户端接收到流之后,然后对流进行操作,如果是文件把流写入文件,然后读取,中间处理文件可以在客户端缓存中处理,也可以保存成文件在处理,例如图片的三级缓存;通常接收的数据一般都转化成string 再处理,当然string在反序列话转化成实体类,还是map或者list结合业务来等数据类型;当然像xml格式的数据,也是先转化成流,通过xml提供api pull和sax进行解析(Dom)一般是对资源文件全部解析;
测试例子
try { //创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。 //而且该文件会被创建到指定目录下。如果该目录有同名文件,那么该文件将被覆盖。 File file = new File("D:/1.txt"); Writer fw = new FileWriter(file.getAbsoluteFile());//目的是明确数据要存放的目的地。 //调用write的方法将字符串写到流中 fw.write("hello world!"); //刷新流对象缓冲中的数据,将数据刷到目的地中 fw.flush(); //关闭流资源,但是关闭之前会刷新一次内部缓冲中的数据。当我们结束输入时候,必须close(); fw.write("first_test"); fw.write("输出,你倒是输出呀!09kjadsfadf"); fw.close(); //flush和close的区别:flush刷新后可以继续输入,close刷新后不能继续输入。 System.out.println(file.getName()); //在写入操作时,第二参数如何设置,设置成true的情况,文件内容就会叠加写入 OutputStream fos = new FileOutputStream(file.getAbsoluteFile(),true); String str = "Hello World!!!"; // 准备一个字符串 byte b[] = str.getBytes(); // 只能输出byte数组,所以将字符串变为byte数组 fos.write(b); // 将内容输出,保存文件 // 第4步、关闭输出流 fos.close(); } catch (IOException e) { e.printStackTrace(); } try { //字符流 File f = new File("D:/1.txt"); Reader read = new FileReader(f); char c[] = new char[1024]; int read1 = read.read(c); read.close(); //字节流 byte[] buf = new byte[2048]; int len; int h = 0; InputStream fos = new FileInputStream(f); while ((len = fos.read()) != -1) { buf[h] = (byte) len; h++; } System.out.println(new String(c, 0, read1) + "\n" + read1 + "\n" + new String(buf, 0, h)); } catch (Exception e) { e.printStackTrace(); }