2022.2.3
FIleInputStream 与FileOutPutStream
-
import java.io.FileInputStream; import java.io.FileOutputStream; public class one { public static void main(String[] args){ FileOutputStream out; FileInputStream in; try{ out = new FileOutputStream("first.txt",true); byte[] buf = new byte[2]; out.write('7'); out.write('h'); out.close(); int n=0; in = new FileInputStream("first.txt"); // while((n=in.read()!=-1) // System.out.print((char)n); while((n=in.read(buf))!=-1) System.out.print( new String (buf)); in.close(); }catch(Exception e){ e.printStackTrace(); } } }
-
具体一些函数的用法都在上面
-
注意下如果用byte数组的话,要用String 的构造方法,然后wirte方法好像是不能输出字符串的,只能输出char类型或者字节类型数据
-
注意下用byte数组可以进行批量的读取信息
-
如果是读取复制图片的话,其实就是将txt改为jpg,然后用byte数组批量读入,当然也可以通过read的返回值,但那非常慢,下面贴个代码,注释部分就是用的那种做法
import java.io.FileInputStream; import java.io.FileOutputStream; public class one { public static void main(String[] args){ FileOutputStream out; FileInputStream in; try{ out = new FileOutputStream("second.PNG"); in = new FileInputStream("first.PNG"); byte[] buf = new byte[1024]; int n=0,i=0; // while ((n=in.read())!=-1){ // out.write(n); // System.out.println(i++); // } while((n=in.read(buf))!=-1){ out.write(buf); System.out.println(i++); } }catch(Exception e){ e.printStackTrace(); } } }
-
缓冲流的使用
-
下面给个代码,用的是复制图片,可以感受一下用缓冲流的速度会快上很多
package wenjian; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; public class one { public static void main(String[] args){ FileOutputStream out; FileInputStream in; BufferedInputStream inOne; BufferedOutputStream outOne; try{ out = new FileOutputStream("second.PNG"); in = new FileInputStream("first.PNG"); byte[] buf = new byte[1]; int n=0,i=0; System.out.println(System.currentTimeMillis()); // while ((n=in.read())!=-1){ // out.write(n); // System.out.println(i++); // } while((n=in.read(buf))!=-1){ out.write(buf); //System.out.println(i++); } System.out.println(System.currentTimeMillis()); out = new FileOutputStream("third.PNG"); in = new FileInputStream("first.PNG"); outOne = new BufferedOutputStream(out); inOne = new BufferedInputStream(in); System.out.println(System.currentTimeMillis()); while ((n=inOne.read(buf))!=-1){ outOne.write(buf); //outOne.flush(); } System.out.println(System.currentTimeMillis()); outOne.close(); inOne.close(); out.close(); in.close(); }catch(Exception e){ e.printStackTrace(); } } }
还有要注意下一下用缓冲区一定要记得关闭或者flursh方法,不然缓冲区内的数据不会被写入到文件中
写作业时发现的一些点(week4)
- 有关于动态代理和静态代理的问题,我觉得这个博客写得很好了https://www.cnblogs.com/cC-Zhou/p/9525638.html
其他
-
InputStream和OutputStream是二进制的流
This abstract class is the superclass of all classes representing an input stream of bytes.