(1)java inputStream表示从外流入到程序;
一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,反之我们称为输入流;
InputStream输入类,首先需要读取的内容转化成输入流,再从它那里进行读取,先关联源;之后过程中关联目的,这样形成了流;
把要读取的内容输入到输入流,再从输入流进行读取,所以是read()
OutputStream输出类,首先需要与写入的目的地相关联,然后通过它进行写入,首先关联的是流的目的;之后的过程中再关联源,这样形成了流
把要输出的东西通过输出流输出到目的地,所以是write()
下面的例子就是将f中的内容读至byte数组中,在实例化的时候,先关联的是f,也就是读取的源,然后input.read(b),关联了目的,也就是数组b
File f = new File("d:"+File.separator+"test.txt"); InputStream input = new FileInputStream(f); byte b[] = new byte[1024]; //读入数组b中 int len = input.read(b); input.close(); System.out.println(new String(b,0,len));
先关联的是目的,文件f,然后out.write(b),指明了源
File f = new File("d:"+File.separator+"test.txt"); OutputStream out = new FileOutputStream(f); String str = "hello,world"; byte b[] = str.getBytes(); out.write(b); out.close();
这里FileInputStream抑或后面的FileOutputStream,
我们实际代码中,可以用临时ByteArrayOutputStream作为源或目的;
即
ByteArrayOutputStream bos = new ByteArrayOutputStream(); OutputStream out = new FileOutputSream(bos); out.toByteArray()
这样的我们可以拿到输出流的字节数组,字节数组一般作为代码里面的中转站。
经典的文件读取方式:https://blog.csdn.net/qq_21989939/article/details/48769523、https://blog.csdn.net/wymrdjm/article/details/78758986、https://juejin.cn/post/6866929917083418637#heading-5
以及最暴力的读取方式,直接读取所有,一把读所有字节和一行一行读取:https://www.cnblogs.com/0201zcr/p/5009975.html
相比于暴力从inputSteam流中直接读取所有的字节,一种更为优雅的方式,借助缓冲区输入流BufferedInputStream(创建BufferedInputStream时,我们会通过它的构造函数指定某个输入流为参数。
BufferedInputStream会将该输入流数据分批读取,每次读取一部分到缓冲中;操作完缓冲中的这部分数据之后,再从输入流中读取下一部分的数据。):https://www.cnblogs.com/firstdream/p/8668006.html
常用的byte数组与String、inputStream、File之间的转换:https://blog.csdn.net/qq_35893120/article/details/79311629、https://blog.csdn.net/tanhongwei1994/article/details/88874158