本文主要是介绍探索InputStream 和 OutputStream 家族成员的心得一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
探索InputStream 和 OutputStream 家族成员的心得
java程序中的流操作主要解决的是,程序与外界的数据交互问题,也就是说这个知识也是必须要掌握的。
问题:什么是 输入?什么是输出?
这个也是一个重要知识,因为在懂得这个概念才能明白数据的传输方向,才能很肯定地使用相关的类进行操作。
输入:从外界环境,将数据传送给运行程序的内存,在内存看来,是读 取数据。
输出:从内存方向,将数据传送给外界环境(比如一个文件),在内存 看来,是向外写数据。
一、文件的字节流类
FileOutputStream 、FileInputStream
import java.io.FileInputStream;import java.io.FileOutputStream;
import java.io.IOException;/*** 操作:文件的字节流相关操作* * @author Character_Painter**/
public class StreamDemo {public static void main(String[] args) throws IOException {/** 向文件中写数据*/FileOutputStream fos = new FileOutputStream("demo.txt",true);//创建文件字节输出流-----目的地demo.txt,参数为true是代表追加模式byte [] b ="java".getBytes();//将字符串的字节长度存在字节数据中fos.write(11);//将11通过文件字节输出流写到文件中fos.write(b, 0, b.length);/** 由于在这种情况下,写数据成功后,--打开demo.txt会是乱码-----原因:编码集不一样*/FileInputStream fis = new FileInputStream("demo.txt");System.out.println(fis.read());//read的返回值是int型System.out.println(fis.read(b));//将字节数据的长度读出来---显示出来/** 从文件中读取数据* * 最终在Console中显示为11,4*/fos.close();fis.close();}}
总结:文件的字节流主要针对的是对文件的操作,读写文件
拓展:利用文件的字节流拷贝文件
/*** 操作:利用文件的字节流--进行文件的拷贝操作* @author Character_Painter**/
public class Copydemo {public static void main(String[] args) throws IOException {/** 拷贝文件操作*/FileInputStream fis = new FileInputStream("demo.txt");//文件字节输入流FileOutputStream fos = new FileOutputStream("demo_copy.txt");//文件字节输出流int b =-1;while((b=fis.read())!=-1){/** 读取源文件的字节数据,如不为-1,就把当前读到的字节数据写到拷贝文件中*/fos.write(b);}fis.close();fos.close();}}
BufferedOutputStream 、BufferedInputStream
缓冲流的作用:一次性写出若干字节数据,减少写出的次数,来提高读写效率。
利用缓冲流拷贝文件
/*** 操作:利用缓冲字节流--进行文件的拷贝操作* @author Character_Painter**/
public class Copydemo {public static void main(String[] args) throws IOException {/** 拷贝文件操作*/FileInputStream fis = new FileInputStream("demo.txt");//文件字节输入流BufferedInputStream bis = new BufferedInputStream(fis);//缓冲字节输入流FileOutputStream fos = new FileOutputStream("Buffer_demo_copy.txt");//文件字节输出流BufferedOutputStream bos = new BufferedOutputStream(fos);//缓冲字节输出流int b =-1;while((b=bis.read())!=-1){/** 读取源文件的字节数据,如不为-1,就把当前读到的字节数据写到拷贝文件中*/bos.write(b);}bos.close();bis.close();}}
三、字符转换流
将字节流转换成字节流,InputStreamReader,OutputStreamWriter
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;/*** 操作:使用字符转换流--设定特定的字符集,读写到文件中* */
public class chars {public static void main(String[] args) throws IOException {/** 利用转换流在文件中写出字符串*/FileOutputStream fos = new FileOutputStream("change.txt");OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");String str ="学习字符转换流";osw.write(str);osw.close();/** 利用转换流读出文件中字符串*/FileInputStream fis = new FileInputStream("change.txt");InputStreamReader isr = new InputStreamReader(fis,"GBK");int c =-1;while((c=isr.read())!=-1){System.out.println((char)c);}isr.close();}}
这篇关于探索InputStream 和 OutputStream 家族成员的心得一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!