第六周学总结

学号20145306 《Java程序设计》第6周学习总结

教材学习内容总结

第十章 一 InputStream与OutputStreamjava

串流设计的概念 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接二者的是串流对象。数据就比如水,串流就像水管,经过水管的衔接,水由一端流向另外一端。从应用程序角度来看,若要将数据历来源取出,可使用输入串流,要将数据写入目的地,可使用输出串流。在Java中,输入串流表明对象为java.io.InputStream实例,输出串流表明对象为java.io.OutputStream实例。不管数据源和目的为什么,只要取的InputStream或者OutputStream的实例,操做输入输出的方法是一致的。 设计一个通用的dump()方法: import java.io.*;web

public class IO {数组

public static void dump(InputStram src,OutputStream dest) throws IOException{网络

try (InputStram input = src;OutputStream output = dest) {架构

byte[] data = new byte[1024];

    int length;

    while ((length = input.read(data)!= -1) {

    output.write(data,0,length);

                 }

           }

      }

}


dump()方法接受InputStream与OutputStream的实例,分别表明读取数据的来源,以及输出数据的目的地。在进行InputStream与OutputStream的相关操做时若发生错误,会抛出java.io.IOException异常,在这里不特别处理,而是在dump()方法上声明throws,由调用dump()方法的客户端处理。在不使用InputStream与OutputStream时,必须使用close()方法关闭串流,因为InputStream与OutputStream操做了java.io.Closeable接口,其父接口为java.lang.AutoCloseable接口,所以可以使用JDK7尝试自动关闭资源语法。每次从InputStream读入的数据,都会置入byte数组中,InputStream的read()方法每次会尝试读入byte数组长度的数据,并返回实际读入的字节,只要不是-1,就表示读取到数据,可使用OutputStream的write()方法,指定要写出的byte数组、初始索引与数据长度。

书上虽然没有正式介绍到网络程序设计,不过java.net.URL的使用很简单,只要指定网址,URL实例会自动进行HTTP协议,可使用openStream方法取得InputStream实例,表明与网站链接的数据串流。学习

串流继承架构

System.in与System.out它们分别是InputStream与PrintStream的实例,分别表明标准输入与标准输出,以我的计算机而言,一般对应至文本模式中的输入与输出。
可使用System的setIn()方法指定InputStream实例,从新指定标准输入来源。
System的setOut()方法指定PrintStream实例,将结果输出至指定的目的地。
 import java.io.*;

 public class StandarOut{

   public static void main (String[] args) throws IOException { 

       try (PrintStream printStream = new PrintStream(new FileOutputStream(args[0]))) {

           System.out.printf("helloWorld");
                                    }

                        }

                  }

PrintStream接受InputStream实例,在这个范例中用PrintStream打包FileOutputStream,你操做PrintStream相关方法,PrintStream会代你操做FileOutputStream。除了System.in与System.out以外,还有个System.err为PrintStream实例,称为标准错误输入串流,它是用来当即显示错误信息的。网站

FileInputStream与FileOutputStream编码

FileInputStream是InputStream的子类,能够指定文件名建立实例,一旦建立文档就开启,接着就能够用来读取数据,FileOutputStream是OutputStream的子类,能够指定文件名建立实例,一旦建立文档就开启,接着就能够用来写出数据,不管FileInputStream仍是FileOutputStream,不使用时都要用close()关闭文档。spa

ByteArrayInputStream与ByteArrayOutputStream.net

ByteArrayInputStream是InputStream的子类,可指定byte数组建立实例。一旦建立就能够将byte数组看成数据源进行读取。ByteArrayOutputStream是OutputStream的子类,可指定byte数组建立实例。一旦建立就能够将byte数组看成目的地写出数据。

串流处理装饰器

InputStream、OutputStream提供串流基本操做,若是想要为输入/输出的数据作加工处理,则可使用打包器类。前面示范过的Scanner类就是做为打包器,其接受InputStream实例,你操做Scanner打包器相关方法,Scanner会实际操做打包的InputStream取得数据,并转换为你想要的数据类型。InputStream、OutputStream的一些子类也具备打包器的做用。前面介绍的PrintStream就是实际例子,你操做PrintStream的print()、println()等方法,PrintStream会自动转换为byte数组数据,利用打包的OutputStream进行输出。下面介绍几种经常使用的串流装饰器类。第一种BufferedInputStream与BufferedOutputStream,二者都具有缓冲做用。若是InputStream第一次read()时能够尽可能读取足够的数据至内存的缓冲区,后续调用read()时先看看缓冲区是否是还有数据,若是有就从缓冲区读取,没有再历来源读取数据至缓冲区,这样减小历来源直接读取数据的次数,对读取效率将会有帮助。毕竟内存的访问速度较快。若是OutputStream每次write()时可将数据写入内存中的缓冲区,缓冲区满了再将缓冲区的数据写入目的地,这样可减小对目的地的写入次数,对写入效率也会有帮助。第二种是DataInputStream与DataOutputStream,DataInputStream与DataOutputStream提供读取、写入Java基本数据类型的方法,像是读写int、double、boolean等的方法。这些方法会自动在指定的类型与字节间转换。第三种是ObjectInputStream与ObjectOutputStream,ObjectInputStream与ObjectOutputStream能够将内存中的对象整个储存下来,以后再读入还原为对象。ObjectInputStream提供readObject()方法将数据读入为对象,而ObjectOutputStream提供writeObject()方法将对象写至目的地,能够被这两个方法处理的对象,必须操做java.io.Serializable接口,这个接口并无定义任何方法,只是做为标示之用,表示这个对象是能够串行化的。若是在作对象串行化时,对象中某些数据成员不但愿被写出,则能够标上transient关键字。

字符处理类 Reader与Writer继承架构 针对字符数据的读取,Java SE提供了java.io.Reader类,其抽象化了字符数据读入的来源,针对字符数据的写入,则提供了java.io.Writer类,其抽象化了数据写出的目的地。在不使用Reader与Writer时,必须使用close()方法关闭串流。Reader与Writer操做了Closeable接口,其父接口为AutoCloseable接口,所以可以使用JDK7尝试自动关闭资源语法。StringReader能够将字符串打包,看成读取来源,StringWriter则能够做为写入目的地,最后用toString()取得全部写入的字符组成的字符串。在启动JVM时,能够用-Dfile.encoding来指定FileReader、FileWriter所使用的编码。

2.字符处理装饰器

若是串流处理的字节数据,实际上表明某些字符的编码数据,而你想要将这些字节数据转换为对应的编码字符,可使用InputStreamReader、OutputStreamWriter对串流数据打包,在创建InputStreamReader与OutputStreamWriter时,能够指定编码,若是没有指定编码,则以JVM启动时所获取的默认编码来作字符转换。PrintStream与PrintWriter使用上极为类似,不过除了能够对OutputStream打包以外,PrintWriter还能够对Writer进行打包,提供print()、println()、format()等方法。

相关文章
相关标签/搜索