常用的io流,java中甚么是IO流

1,java中甚么是IO流流是1组有顺序的,有出发点和终点的字节集合,是对数据传输的总称或抽象 。即数据在两装备间的传输称为流,流的本质是数据传输 , 根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作 。IO流的分类?根据处理数据类型的不同分为:字符流和字节流?根据数据流向不同分为:输入流和输出流IO流是指输入Input流和输出Output流 。
2,java中的IO流是什么啊该怎么理解啊我给你打个比方你就明白了;比如你家的水龙头的管道就是一个流:流又分为输入输出流,输入流就是你家水龙头抽水库水的那头(FileInputStream:将水抽到管道里面),输出流就是你家水龙头流到你家大水缸的那头(FileOutputStream:将水流到缸里) 。现在有个A.txt文件,你要读取里面的信息 , 就相当于水龙头抽水库水到管道(FileInputStream),然后读取完后写入到另一个文件里面(FileOutputStream),就是相当于水龙头将抽到水后流到大水缸 。很简单吧 , 就是一进一出的事,没这么复杂 。别太官方了Java中的IO流是输入输出流 。至于理解,可以将输入和输出两个端点看作是两个工厂,工厂之间需要互相运输货物 , 而流则是两工厂之间的公路,没有公路就不能互相运输,至于字符 , 字节和二进制则可以看作是运输的方式和单位大?。热缢蛋讯评斫獬扇殖? ,那么字节就是小卡车 , 而字符则是集卡之类的 。输入 输出的方向 是以内存为基准,往内存里去 是输入,内存里往外是输出不知道我这样理解对不对 。通俗一点 , 就类似一根管道,有进有出文件输入输出把流理解成一个中间介质,所谓的input和out是针对这个介质来说的 , input是进入这个介质,out是这个介质输出 。
3 , 关于JAVA IO流流是没有规范的,集合的作用可以认为用于对流的规范 , 其实IO中的类很多都是可以完成你要的写操作的 , 问题看你自己喜欢使用哪个类,不管什么语言流和buffer总是挂钩的,流需要buffer的支持才能体现出流的特性和优势io流主要也就分两大类:一、字节流、字符流二、输入流、输出流最基本的也就是FileInputStream/FileOutputStream和InputStreamReader/OutputStreamReader掌握这两种,其他也确实类似以下是看到别人总结的一些关于io流的 , 希望对你有帮助Java IO的一般使用原则:一、按数据来源(去向)分类:1、是文件:FileInputStream/FileOutputStream;FileReader/FileWriter2、是byte[]:ByteArrayInputStream/ByteArrayOutputStream3、是Char[]:CharArrayreader/CharArrayWriter4、是String:StringBufferInputStream,StringReader,StringWriter5、网络数据流:InputStream,OutputStream,Reader,Writer二、按是否格式化输出分:1、要格式化输出:PrintStream,PrintWriter三、按是否需要缓冲分:1、 要缓冲:BuffereadInputStream,BuffereadoutputStream;BuffereadReader,BuffereadWriter四、按数据格式分:1、二进制格式(只要不能确定是存文本的):InputStream;OutputStream及其所有带Stream结束的子类2、存文本格式:Reader,Writer及其所有带Reader,Writer的子类五、按输入输出分:1、 输入:Reader,InputStream类型的子类2、输出:Writer,OutputStream类型的子类决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):第一,考虑最原始的数据格式是什么:是否为文本?第二,是输入还是要输出?第三,是否需要转换流:InputStreamReader,OutputStreamReader?第四,数据来源(去向)是什么?第五,是否要缓冲:BufferedReader第六 , 是否需要格式化输出:print?【常用的io流,java中甚么是IO流】
4,关于java中的io流自己去查书4、基本字节流类 4.1、FileInputStream和FileOutputStream 这两个节点流用来操纵磁盘文件 。这些类的构造函数允许你指定它们所连接的文件 。要构造一个FileInputStream,所关联的文件必须存在而且是可读的 。如果你要构造一个FileOutputStream而输出文件已经存在 , 则它将被覆盖 。FileInputStream infile = new FileInputStream(”myfile.dat”); FileOutputStream outfile = new FileOutputStream(”results.dat”); 4.1、 BufferInputStream和BufferOutputStream 这些是过滤器流,它们可以提高I/O操作的效率 。4.3、 PipedInputStream和PipedOutputStream 管道流用来在线程间进行通信 。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入 。要使管道流有用,必须有一个输入方和一个输出方 。4.4、 DataInputStream和DataOutputStream 这些过滤器通过流来读写Java基本类 5、 基本字符流类 图阐述了Reader和Writer字符流的体系结构 。5.1、InputStreamReader 和 OutputStreamWriter 用于字节流与字符流之间的转换接口 。当你构造一个InputStreamReader或OutputStreamWriter时 , 转换规则定义了16位Unicode和其它平台的特定表示之间的转换 。InputStreamReader从一个数据源读取字节,并自动将其转换成Unicode字符 。如果你特别声明,InputStreamReade会将字节流转换成其它种类的字符流 。OutputStreamWriter将字符的Unicode编码写到输出流 , 如果你的使用的不是Unicode字符,OutputStreamWriter会将你的字符编码转换成Unicode编码 。5.2.、缓冲读者和作者 因为在各种格式之间进行转换和其它I/O操作很类似,所以在处理大块数据时效率最高 。在InputStreamReader和OutputStreamWriter的结尾链接一个BufferedReader和BufferedWriter是一个好主意 。记住对BufferedWriter使用flush()方法 。5.3、 使用其它字符转换 如果你需要从一个非本地(例如,从连接到一个不同类型的机器的网络连接读取)的字符编码读取输入,你可以象下面这个程序那样,使用显式的字符编码构造ir=new InputStreamReader(System.in,“8859_1〃); 注:如果你通过网络连接读取字符,就应该使用这种形式 。否则,你的程序会总是试图将所读取的字符当作本地表示来进行转换,而这并不总是正确的 。ISO 8859-1是映射到ASCII的Latin-1编码模式 。几种可能的异常(ioexception的一些子类,这些是有关文件读写方面可能抛出的异常,还可能有其他方面异常,参考jdk api文档的ioexception类的子类)总体说有:文件不存在,读取写入出错(如磁盘硬件错误、写保护、无空间等) , 权限问题(文件被锁定、无访问权限等)eofexception:当输入过程中意外到达文件或流的末尾时,抛出此异常 。此异常主要被数据输入流用来表明到达流的末尾 。注意,其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常 。filelockinterruptionexception:当某个线程正在等待获取文件锁定时被另一个线程中断,则由该线程接收此经过检查的异常 。抛出此异常之前,将设置以前被阻塞的线程的中断状态 。filenotfoundexception:当试图打开指定路径名表示的文件失败时 , 抛出此异常 。在不存在具有指定路径名的文件时,此异常将由 fileinputstream、fileoutputstream 和 randomaccessfile 构造方法抛出 。如果该文件存在,但是由于某些原因不可访问 , 比如试图打开一个只读文件进行写入,则此时这些构造方法仍然会抛出该异常 。iioexception:该异常类用于发出关于读取和写入操作的运行时故障的信号 。interruptedioexception:i/o 操作已中断信号,抛出此异常 。抛出 interruptedioexception 指示输入或输出传输已经终止 , 原因是执行此操作的线程中断 。字段 bytestransferred 指示在发生中断之前已成功传输了多少字节 。5 , java的几种IO流读取文件方式一、超类: 字节流: InputStream(读入流) OutputStream(写出流) 字符流:Reader(字符 读入流)Writer (字符写出流)二、文件操作流 字节流: FileInputStream,FileOutputStream 字符流: FileReader, FileWriter(用法与字节流基本相同,不写)//1.指定要读 的文件目录及名称File file =new File("文件路径");//2.创建文件读入流对象FileInputStream fis =new FileInputStream(file);//3.定义结束标志,可用字节数组读取int i =0 ;while((i = fis.read())!=-1)//i 就是从文件中读取的字节 , 读完后返回-1}//4.关闭流fis.close();//5.处理异常//1.指定要写到的文件目录及名称File file =new File("文件路径");//2.创建文件读入流对象FileOutputStream fos =new FileOutputStream(file);//3.定义结束标志fos.write(要写出的字节或者字节数组);//4.刷新和关闭流fos.flush();fos.close();//5.处理异常三、缓冲流: 字节缓冲流: BufferedInputStream,BufferedOutputStream 字符缓冲流:BufferedReader ,BufferedWriter缓冲流是对流的操作的功能的加强,提高了数据的读写效率 。既然缓冲流是对流的功能和读写效率的加强和提高,所以在创建缓冲流的对象时应该要传入要加强的流对象 。//1.指定要读 的文件目录及名称File file =new File("文件路径");//2.创建文件读入流对象FileInputStream fis =new FileInputStream(file);//3.创建缓冲流对象加强fis功能BufferedInputStream bis =new BufferedInputStream(fis);//4.定义结束标志,可用字节数组读取int i =0 ;while((i = bis.read())!=-1)//i 就是从文件中读取的字节,读完后返回-1}//5.关闭流bis.close();//6.处理异常//1.指定要写到的文件目录及名称File file =new File("文件路径");//2.创建文件读入流对象FileOutputStream fos =new FileOutputStream(file);//3.创建缓冲流对象加强fos功能BufferedOutputStream bos=new BufferedOutputStream(fos);//4.向流中写入数据bos.write(要写出的字节或者字节数组);//5.刷新和关闭流bos.flush();bos.close();//6.处理异常四、对象流ObjectInputStream ,ObjectOutputStream不同于以上两种类型的流这里只能用字节对对象进行操作原因可以看上篇的编码表比照原理ObjectOutputStream对象的序列化:将java程序中的对象写到本地磁盘里用ObjectOutputStream eg:将Person类的对象序列化到磁盘1. 创建Person类注1:此类要实现Serializable接口,此接口为标志性接口注2:此类要有无参的构造函数注3:一旦序列化此类不能再修改class Person implements Serializablepublic Person()}2.创建对象流对象注:要增强功能可以将传入文件缓冲流ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream(new File("文件路径")));3.写入对象 ,一般会将对象用集合存储起来然后直接将集合写入文件List<Person> list =new ArrayList<>();list.add(new Person());...(可以添加多个)oos.writeObject(list);4.关闭流 , 处理异常oos.flush();oos.close();五、转换流:这类流是用于将字符转换为字节输入输出,用于操作字符文件,属于字符流的子类,所以后缀为reader,writer;前缀inputstream , outputstream;注 :要传入字节流作为参赛InputStreamReader: 字符转换输出流OutputStreamWriter:字符转换输入流//1.获取键盘输入的字节流对象inInputStream in =Stream.in; /*2.用转换流将字节流对象转换为字符流对象,方便调用字符缓冲流的readeLine()方法*/InputStreamReader isr =new InputStreamReader(in);/*5.创建字符转换输出流对象osw,方便把输入的字符流转换为字节输出到本地文件 。*/OutputStreamWriter osw =new OutputStreamWriter(newFileOutputStream(new File("文件名"))); /*3.现在isr是字符流 , 可以作为参数传入字符缓冲流中*/BufferedReader br =new BufferedReader(isr);/*4.可以调用字符缓冲流br的readLine()方法度一行输入文本*/String line =null;while((line =br.readLine())osw.write(line);//osw是字符流对象,可以直接操作字符串}注:InputStreamReader isr =new InputStreamReader(new "各种类型的字节输入流都行即是:后缀为InputStream就行");OutputStreamWriter osw =new OutputStreamWriter(new"后缀为OutputStream就行"); 六、区别记忆1.对象流是可以读写几乎所有类型的只要是对象就行,而字节字符流,只能读写单个字节字符或者字节字符数组 , 以上没有读写字节字符数组的;注意对象流只有字节流!2.字符和字节循环读入的结束条件int i=0; (i =fis.read())!=-1用字符数组复制文件(fr 读入流,fw写出流),字节流也是相同的用法int i = 0;char[] c = new char[1024];while((i = fr.reade()) !=-1))fw.write(c,0,i);}1234563.对象流里面套缓冲流的情景: new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File(“文件路径”))));4.记忆流及其功能的方法:前缀表示功能,后缀表示流的类型;比如说FileInputStream前缀:File,表示操作的磁盘,后缀:intputstream,表示是字节输入流 。同理 FileReader:表示操作文件的字符流ObjectInputStream :操作对象的字节输入流5.拓展:获取键盘输入的字符的缓冲流的写法: new BufferedReader(new InputStreamReader(System.in))); 将字节以字符形式输出到控制台的字符缓冲流的写法: new BufferedWriter( new OutputStreamWriter(System.out))

    推荐阅读