第7章 输入输出及文件操作 Flashcards
输入输出及文件操作概述
Java的输入输出流包括字节流、字符流、文件流、对象流以及多线程之间通信的管道流。
1、计算机数据的I/O方向
(1)流的概念
在计算机中,1984年由C语言第一次引入“流”的概念。“流”可以看做是一个流动的数据缓冲区。数据从数据源流向数据目的地。流的传送是串行的。最常见的数据源是键盘,最常见的数据目的地是屏幕。从键盘键入文本,文本字符通过内存流向屏幕,最终在屏幕上显示出来。
(2)I/O流的方向
输入输出在计算机系统中起到了采集数据和提供数据处理结果的双重作用,它是以中央处理器(含控制器和内存)为此,以网络及外部设备为彼的双向数据传输机制。常用的外部设备如键盘、显示器、硬盘、扫描仪、打印机、网络等等。凡是从外部设备流向中央处理器的数据流,称之为输入(Input)流;反之,称这为输出。
2、Java中饮食的输入 /输出流的类
(1)Java.io包中的接口
①处理字节流的有DataInput接口和DataOutput接口。DataOutputStream类实现了解DataOutput接口,RandomAccessFile类同时实现了这两个接口。
②处理对象流的有ObjectInput接口和ObjectOutput接口,ObjectInputDStream类实现了ObjectInput接口,ObjectOutputStream类实现了OjectOutput接口。
③FileNameFilter接口用于筛选文件名(而在Java文件对话框中筛选文件名用另一个包中的类:javax.swing.filechooser.Filefilter)。
④Serializable接口用来处理对象流。
(2)java.io包中的抽象类
①Java中处理字节流的抽象类有InputStream和平共处OutputStream。InputStream有7个子类,OutputStream有5个子类。
②Java中处理过滤流的抽象类是FilterOutputStream和FilterInputStream,而这两个抽象类又分别是抽象类InputStream和OutputStream的子类。对于流动数据的过滤也就是进行某种形式的加工。
③Java中处理字符流的抽象类是Reader类和Writer类。它们的直接子类分别有6个和7个。
④Java中处理压缩流的抽象类是InflaterInputStream和DeflaterOutputStream,它们分别有3个子类。
(3)java.io包中的非字符输入流
Java中的字节输入流都是抽象类InputStream的子类。
①ByteArrayInputStream以字数组作为输入流。
②FileInputStream可对一个磁盘文件涉及的数据进行处理。
③PipedInputStrem是实现线程之间通信的一个类。
④FilterInputStream过滤器输入流本身也是一个抽象类。
⑤SequenceInputStream将多个输入流首尾连接,得到一个新的输入流。
⑥StringBufferInputStream,这个类自从jdk1.1以后就不再荐使用了。
⑦ObjectInputStream类实现了ObjectInput接口,对象在传输前,要首先实现Serializable接口。
(4)java.io包中的非字符输出流
非字符输出流都是OuputStream抽象类的子类。
①ByteOutputSteeam,字节数级输出流。这个类将一个字节数组作为输出流。
②FileOutputStream用于对磁盘文件涉及的数据流进行输出处理,即向一个文件对象中写入数据。
③FilterOutputStream是一个抽象类,和FilterInputStream相对应。所有的输出过滤类都是它的子类。
④PipedOutputStream类和PipedInputStream相对应,在两个线程通信过程中成对出现。
⑤ObjectOutputStream既继承了OutputStream抽象类,又实现了ObjectOutput接口,这是Java用接口技术代替双重继承例子,其构造方法参数是串行化了的对象。
(5)java.io包中的过滤字输入流
过滤字节输入流都是抽象类型FilterInputStream的子类。
①BufferedInputStream类以缓溃器对输入流进行了性能优化。
②CheckedInputStream,带数据校验的输入流。这个类在java.util.zip包中,却继承了java.io包的FilterInputSStrea抽象类。它允许在读一个流的同时根据它的内容计算校验和,这对于根据已经公布了的校验和值来检测数据流的完整性时,很有用。
③DingestInputStream以“理解”或“摘要”方式过滤数据。这个类在java.security包中,也继承了java.io包中的抽象类FilterInputStream。这个类是一个带有相关的MessageDigest对象的字节输入流。当字节被任何read()方法读取的时候,这些字节都会被自动地传递给java.security.MessgeDigest类的某一子类的update()方法。读完字节之后,可调用MessageDigeat的digest()方法获得一个消息摘要。
④InflaterInputStream,压缩过滤流。这里的过滤是指文件类型的过滤,即有选择地输入inflater格式的压缩文件,进行解压过滤。该类属于java.util.zip包,其父类是java.io包的FilterInputStream,这是一个过渡类。
⑤LineNumberIputStream类可以记录所读取数据的行数,现在已经不推荐使用。
⑥PushBackInputStream类对字节输入流进行如此过滤:超前读入一个字节后推回。这个类在编写编译器时用得较多。
⑦DateInputStream在读入字节数据时,进行Java基本数据类型判断过滤。
(6)java.io包中的过滤字节输出流
过滤字节输出流都是FilterOutputStream抽象类的子类。
①BufferedoutputStream和BufferedInputStream相对应,缓冲区优化了字节数据传送。
②CheckedOutputStream和CheckedInputStream相对应,属于java.util.zip包,单继承了java.io包的FilterOutputStream类,是一个带计算数据较验和的字节输出流。
③DigestOutputStream和DigestInputStream相对应,同属java.security包。这个类和该名中的另一个类MessageDigest相配合,进行输出流的消息摘要过滤。
④DeflaterOutputStream和InflaterInputStream相对应,将输入加压文件进行解压过滤和输出解压(Deflater格式)文件进行加压过滤相结合。这是一个过渡类。
⑤PrintStream类是字节输出流的特有的类,该类把Java的基本数据类型转换成字符中表示。该类目前都用在System.out和Syteam.err上,为控制台方式的标准输出。在其他应用方面,已经被PrintWriter所取代。
⑥DataOutputStream和DateInputStream相对应,进行字节输出的基本数据类型判断。或者说以二进制形式向字节输出流中写入一个单个的Java基本数据类型。(7)java.io包中的压缩文件输入流
压缩文件输入流类都是InflaterInputStream的子类,是以字节压缩为特征的过滤流。
①GZIPInputStream类在java.util.zip包中,该类用于输入以gzip格式进行压缩的文件,是对与输入文件类型的一种过滤。
②ZipInputStream类也在java.util.zip包中,该类用于输入以gzip格式进行压缩的文件,是对与输入文件类型的一种过滤。
③JarInputStream类在java.util.jar包中,是ZipInputStream的子类,用于输入jar文件。
(8)java.io包中的压缩文件输出流
压缩文件输出流类都是DeflaterOutputStream抽象类的子类。
①GZIPOutputStream类在java.util.zip包中。与GZIPInputStream相对应,用于对Deflater格式的数据进行加压过滤。
②ZipOutputStream类处理后的文件类型是zip型。
③JarOutPutStream在java.util.tar包,该类继承了ZipOutputStream类,过滤处理的是jar格式的文件。
(9)java.io包中的字符输入汉
字符输入流都是抽象类Reader类的子类。
①BufferedReader类带缓冲区字符输入流。缓冲区的大小既可以指定,又可以是默认的。该类相当于字符流的InputStream。该类通常和FileReadr、InputStreamReader一起使用。
②LineNumberReader是BufferedReader的一个子类:这是一个在缓冲输入流的基础上,又增加了文本得计数功能的类。该类出现后,替代了LineNumberInputStream类,jdk1.1之后,LineNumberInputStream就不再推荐使用了。
③CharArrayReader,字符数组读入器。该类是一个将和个字符数组作为其返回数据的数据源的字符输入流。
④FilterReader是一个抽象类,但它没有一个抽象方法。该类之所以定义为抽象类目的是禁止其实例化的这是一个过渡类。
⑤PushBachReader是FilterReader的子类。该类在读入一个字符的时候,超前读入一个字符再将其推回。推回的字符还可扩展为字符数组成或字符数组的一部分。该类是PushBackStream类在字符流中的替代。
⑥InputStreamReader类是以字节输入流为数据源的字符输入流。该类可能节码翻译成字符码。
⑦FileReader是InputStreamReader的子类,用于从文件中读取文本。
⑧PipedReader和PipedWriter相结合,用于线程之间的字符通信。
⑨StringReader类用于将一个String对象作为一个字符输入流来使用,其作用和CharArrayReader很相似。
(10)java.io包中的字符输出流
字符输出流类都是Write抽象类的子类。
①BufferedWriter类是一个带缓冲区的字符输出流。
②CharArrayWtiter和CharArrayReader相对应,CharArrayWriter写入的是一个内部的字符数组。
③FilterWriter是一个抽象类,凡字符过滤类都可从该类派生出来。
④OutputstreamWirter是一个将字符翻译成字节输出的字符输出流。
⑤FileWriter类是OutputStreamWriter的子类,该类用于向一个文件里写入文本。
⑥PipedWriter类和PipedReader类相对应,用于线程之间的字符通信。
⑦PrintWriter是字符输出流特有的类,可以将数据(字节或字符)的字符串表示作为字符流输出。
⑧StringWriter将字符写入一个内部的StringBuffer,是一个将字符写成串的字符输出流。
(11)java.io包中的同时兼有输入输出功能的类
RandomAccessFile是java.io包中的一个兼有输入输出功能的类,该类同时实现了DataInput和DataDutput接口,而且直接继承了Object类。
文件
文件类File是java.io包中的一个重要的非流类。File以一种系统无关的方式表示一个文件对象的属性。文件名的列表,通过类File所提供的方法,可得到文件或目录的描述信息(包括名字、路径、长度、可读、可写等),也可以生成新文件、目录、修改文件和目录,查询文件属性,重命名文件或者删除文件。File描述了文件本身的属性。File类中封装了对文件系统进行操作的功能。
1、创建文件
以下语句用来创建一个文件:其中构造函数的参数,可以是路径文件名,也可以是路径和文件名。
File pathname = new File(args[0]);//以路径文件名来建立文件对象
File f = new File(pathname.getPath,fileNames[i])//(路径,文件名)
2、File类提供的方法
(1)对文件名操作提供的方法
①public String getName(),得到一个不包含路径的文件名。
②public String getParent(),得到文件上一级的目录名。
③public File getParentFile(),得到文件对象父路径名。
④public String getPath(),返回文件路径名字符串,即路径文件名。
⑤public String[ ]list(),返回一个字符串数组,为该文件所在在目录下的所有文件名列表。
⑥puclic String getCanonicalPath()throws IOException,返回该文件对象与系统平台相关的绝对路径,即返回包含绝对路径名的字符串,或者说返回一个绝对文件名,该绝对文件名是通过将一个相对文件名连接到当前工作目录下产生的。本方法也可以用getAbsoluttPath()代替。
⑦public String renameTo(File newName),返回重命名后的文件名。
⑧public File getCanonicalFile()throws IOException,等价于new File(this.getCanonicalPath())。
⑨public String getAbsolutePath(),得到一个文件的绝对路径名。
⑩public String getAbsoluteFile(),等价于new File(this.getAbsolutePath()).
(2)测试文件属性操作提供的方法
①public boolean isDirectory()测定是否是目录,返回一个布尔值,如果File代表一个目录,则返回true;反之,则返回false。
②public boolean isFile(),测定是否是文件。
③public boolean iaAbsolute(),测定文件是否是绝对路径名。
④public boolean exists(),测定文件是否存在。
⑤public boolean canRead(),测定是否为可读文件。
⑥public boolean canWrite(),测定是否为可写文件。
(3)为文件信息操作和工具提供的方法
①public boolean delete(),删除当前文件并释放资源。
②public void deleteOnExit(),执行完后,删除文件。
③public long length(),返回文件字节长度。
④public long lastModified(),返回文件最后修改时间。
(4)为目录操作提供的方法
①public boolean mkdir(),创建目录。
②public boolean mkdirs(),创建包含父目录的目录。
③public String[ ]list(),返回当前目录下的文件。
④public String[ ]list(FilenameFilter filter),返回当前目录下经过滤后的文件。
⑤public static File[ ]listRoots(),返回根目录结构。
(5)其他方法
①public int hashCode(),返回文件名的哈希码。
②public boolean setLastModified(long time),设置文件最后修改时间。
③public boolean setReadOnly(),设置文件只读属性。
3、程序实例
try-catch结构分为这样几个步骤:
①按照命令行参数指定路径的(文件)名建立文件对象。
②以文件对象的list()方法为指定路径下的所有文件名字符串数组赋值。
③以计数循环打印出指定路径下的所有文件名。
④计数循环体中对于主方法的嵌套调用,是为了打印出该路径文件名下的所有子目录。
4、随机文件流
文件操作中经常需要的是随机访问,Java中的RandomAccessFile类提供了随机访问文件的功能,它继承了Object类,用DataInput和DatOutput接口来实现。接口中定义了从流中读/写基本类型的数据方法。因此也可以随机读入字节数据文件的记录。
5、压缩文件流
Java中的压缩文件流类编在java.util.zip包(该包涵盖了zip,GZIP)和java.util.jar包(包括jar)中。当输入一个Zip文件时要将Zip文件作为FileInputStream构造方法的参数,而FileInputStream对象又作为ZipInputStream构造方法的参数出现 。这里的ZipIputStream对象在将压缩文件内的输入贡作为字符文本读出时即作为InputStreamReader的构造方法参数出现。最后,InputStreamReader对象作为BufferedReader的构造方法参数,并且使用readLine()方法将压缩文件输入项作为文本读出。压缩文件输入流包括ZipInputStream类及其子类JarInputStream、GZIPInputStream等类。压缩文件输出流包括ZipOutputStream类及其子类JarOutputStream、GZIPOutputStream类等。
字节I/O流
1、字节输入流
所有的字节输入流都从InputStream类继承,字节输入流首先要实现DataInput接口,字节数据流DataInputStream是一个已经实现了该接口的类。字节数据是以文件输入流FileInputStream对象的形式作为DataInputStream的构造方法参数出现的,而字节数据来自于二进制文件,二进制文件可作为FileInputStream对象的构造方法的参数出现。
InputStream类包括的主要方法有:
①public abstract int (byte[ ]b)throws IOException,该方法从输入流中读多个字节,存入字节数组。
②public abstract int read()throws IOException,该方法从输入流中读入一个字节。
③public int read(byte[ ]b,int off,int len)throws IOException,该方法从输入流中读出最多len个字节,存入b数组,从off位置开始存入,返回实际读入字节数。
④public int available()throws IOException,返回输入流中可读字节数。
⑤public long skip(long n)throws IOException,该方法从输入流中最多向后跳n个字节,返回实际跳过字节数。n为负,不跳字节。
⑥public void close()throws IOException,关闭输入流,并释放相关资源。
2、字节输出流
所有的字节输出流都继承于OutputStream类,字节输出流首先也要实现DataOutput接口,字节数据流DataOutputStream是一个已经实现了该接口的类。然而,字节数据是以文件输出流FileOutputStream对象的形式作为DataOutputStream的构造方法的参数出现,而字节数据来自于二进制文件,二进制文件可作为FileOutputStream对象的构造方法的参数出现。
DataOutputStream备有读写各种类型数据的方法。
3、内存的读写
在java.io中,还提供了ByteArrayInputStream、ByteArrayOutputStream和StringBufferInputStream类可直接访问内存,它们是InputStream和OutputStream的子类。
用ByteArrayInputStream可从字节数组中读取数据,它可重写InputStream父类的方法有:
①public int read();
②public int read(byte b[ ],int off,int len);
③public ling skip(long n);
④public int available();
⑤public boolean markSupported();
⑥public void mark(int readAheadLimit);
⑦public void reset();
⑧public void close()throws IOException;
用ByteArrayOutputStream可以向字节数组(缓冲区)写入数据。缓冲区是自动生成其中的数据可通过toByteArray()和toString()方法恢复,它可重写OutputStream父类的方法有:
①public void write(int b);
②public void write(byte b[ ],int off,int len);
③public void writeTo(OutputStream out)throws IOException;
④public void reset();
⑤public void close()throws IOException;
它自动含方法有:
①public byte[ ]toByteArray(),建立一个新的数组,将缓冲区的数据拷贝到该数组中,返回当前输出流内容的数组。
②public int size(),返回缓冲区大小。
③public String toString(String enc)throws UnsupportedEncodeingException,将缓冲区内容转换成字符串,字符用enc编码。
字符类I/O流
在Java中,字符是以16位Unicode码的形式表示的。在java.io包中,处理Unicode码的所有类,都是从Reader和Writer两上抽象超类中衍生出来的。
1、字符类输入流
字符类输入流都是抽象类型Reader的子类,其中包括:InputStreamReader及其子类FileReader,BufferedReader及其子类LineNumberReader,另外还有FilterReader及其子类PushBackReader、CharArrayReader、PipedReder、StringReader等。FileReader是InputStream的子类,用于从一个文本文件中读取Unicode文本。BufferdReader把缓冲技术用于字符输入流,提高了字符传送的效率。
Reader类包含的主要方法有:
①public int read()throws IOException,从输入流中读一个字符。
②public int read(chat cbuf[ ])throws IOException,从输入流中读入最多cbuf.length个字符,存入字符,存入cbuf的off起始位置,返回实际读入字符数。
③public abstract int read(char cbuf[ ],int off,int len)throws IOExcetion,从输入流中读入最多len个字符,存入cbuf的off起始位置,返回实际读入字符数。
④public long skip(int readAheadLimit) throws IOException,给当前输入流做标记,最多返回readAheadLimit个字符。
⑤Public boolean markSuppoted(),该方法用于判别当前输入流是否支持做标记。
⑥public void mark(int readAheadLimit)throws IOException,给当前输入流做标记,最多返回readAheadLimit个字符。
⑦public void reset()throws IOException,给当前字符流所用的编码方式。
InputStreamReader类包含的主要方法有:
①public String getEncoding(),获得当前字符流所用的编码方式。
②public InputStreamReader(InputStream in),基于字节流in生成一个输入字符流对象。
③public void close()throws IOException,关闭输入流。
BufferedReader类包含的主要方法有:
①public String readLine() throwsIOException,该方法用于读取一行字符。
②public BufferedReader(Reader in),基于in字符输入流生成相关缓冲流。
③public BufferedReader(Reader in,int sz),基于in字符输入生成相关缓冲流,缓冲区大小为sz。
2、字符类输出流
字符类输出流的各个类都是抽象类Writer的子类,其中包括:PrintWriter类、OutputStreamWriter及其子类FileWriter、BufferedWriter、FiltrWriter、CharArrayWriter、PipedWriter、StringWriter等。PrintWriter是一个以打印写入者表示的字符输出流。println()方法负责向输出流写入字符。FileWriter是OutputStreamWriter的子类,用于向文本文件中写入字符。
Writer类中主要包含方法有:
①public void write(int c)throws IOException,把整型值c的低16位写入输出流中。
②public void Write(char cbuf[ ])throws IOException,把数组cbuf[ ]的字符写入输出流。
③public abstract void write(char cbuf[ ],int off,int len)rhrows IOException,把数组cbuf中从off位置开始的len个字符写入输出流。
④public void write(String str)throws IOException,把字符串str中的字符写入输出流。
⑤public void write(String str,int off,int len),把字符串str中从off位置开始的len个字符写入输出流。
⑥public flush throws IOException,清空输出流并将缓冲全部内容写入输出流。
OutputStreamWriter类包含的主要方法有:
①public OutputStreamWriter(OutputStream out),基于字节流out生成一个输出字符流对象。
②public void close()throws IOException,关闭输出流。
BufferedWriter类包含主要方法有:
①public void newLine()throws IOException,该方法用于写入一行结束标记,该标记是系统定义的属性line.separator。
②public BufferedWriter(Writer out),基于out字符输出流生成相关缓冲流。
③public BufferedWriter(Writer out,int sz),基于out字符输出流生成相关缓冲流,缓冲区大小为sz。
过滤流
Java对I/O访问还提供了同步处理机制,这就是过滤流。保证某时刻只有一个线程访问一个I/O流,它偿是FilterInptuStream和FilterOutputStream抽象类,由它们衍生出一些过滤子类,它们也重写了父类InputStream和OutputStream的所有方法。一般,使用一个过滤流要求首先把过滤流连接以某个I/O流上,再通过构造方法的参数去指定连接的I/O流。
①BufferedInputStream和BufferedOutputStream都FilterInputStream和FilterOutputStream的子类。
②DataInputStream和DataOutputStream也是过滤流子类,其特点是不仅能读/写数据流,还能读/写java的内构类型boolean、int、float等数据。
③LineNumberInputStream过滤类,在输入数据时,对换行、回车都处理为换行外,还能对行计数。
④PushbackInputStream,对编译的语法分析很有用。
⑤PrintStream用来标准输出。
管道流
为把一个程序、线程或代码段的输出连接到另一个程序、线程或代码段的输入,java.io提供了PipedInputStream和PipedOutputStream类作为管道一输入/输出构件。它们的使用要求管道的输入流与管道的输出流必须事先连接好,管道的输入流作为管道的接收方,而管道的输出流作为发送方。它们包含的方法有:
①PipedInputStream(PipedOutputStream sre)。
②PipedOutputStream(PipedInputStream snk)。
③public void connect(PipedOutputStream sre)。
④public void connect(PipedInputStream)。
J2SE1.4提供的新的I/O
j2se1.4提供了一些新的输入输出功能,称之为New IO。这些新类收集到一个新包中即java.nio包。该包中的新类有:MappedByteBuffer、FileChannel等等。
nio包的新特点是:
(1)内存映射技术
该技术出于这样的考虑:访问内存要比访问硬盘速度快得多,如果将磁盘文件映射到内存中,这样对于磁盘文件的访问就成了对于内存文件的访问,访问速度就会大大提高。
(2)文件锁定
当多个线程对于同一个文件进行访问时,文件锁定实现对于多个线程的访问同步,避免了可能的文件安全隐患。
(3)字符及编码
将早期分布于类库各个角落的字符处理内容集中到java.nio.Charset类中,统一了字符集转换,便利了调用和管理。
(4)非阻塞I/O
用于消除线程读写时的阻塞。
新IO技术和java.util.zip包中CRC(Cyclic Redundancy Check,循环冗余校验)类相结合,可以提高数字传输的CRC校验速度。
1、内存映射文件
java.nio包中的MappedByteBuffer(内存映像缓冲器)类,表示一个磁盘文件在内存缓冲区的一个字节映像。之所以要将磁盘文件映射到内存,是因为对于内存的读写其速度比对于硬盘的读写要快。
2、文件通道
java.nio.channels包中FileChannel(文件通道类)就是为磁盘文件映入内存提供一个通道。该通道可通过FileInputStream.getChannel()方法获得。FileChannel.map()方法用来将文件映入内存。所要映射的磁盘文件名以FileInputStream构造方法的参数形式出现。
3、CRC32类
CRC(Cyclic Redundancy Check,循环冗余校验)技术用在数字传输技术领域,以传输的可靠性为目的,进行差错控制。CRC编码简单,误判率低,在数字传输入 系统得到广泛应用。在java.util.zip包中,有一些计算CRC校验和的类。
java.util.zip.CRC32类:
①void update(int c),用指定字节(例如文件输入流所读入的字符)进行CRC更新。
②long getValue(),取CRC—32校验值。
J2SE1.4提供的新的I/O
j2se1.4提供了一些新的输入输出功能,称之为New IO。这些新类收集到一个新包中即java.nio包。该包中的新类有:MappedByteBuffer、FileChannel等等。
nio包的新特点是:
(1)内存映射技术
该技术出于这样的考虑:访问内存要比访问硬盘速度快得多,如果将磁盘文件映射到内存中,这样对于磁盘文件的访问就成了对于内存文件的访问,访问速度就会大大提高。
(2)文件锁定
当多个线程对于同一个文件进行访问时,文件锁定实现对于多个线程的访问同步,避免了可能的文件安全隐患。
(3)字符及编码
将早期分布于类库各个角落的字符处理内容集中到java.nio.Charset类中,统一了字符集转换,便利了调用和管理。
(4)非阻塞I/O
用于消除线程读写时的阻塞。
新IO技术和java.util.zip包中CRC(Cyclic Redundancy Check,循环冗余校验)类相结合,可以提高数字传输的CRC校验速度。
1、内存映射文件
java.nio包中的MappedByteBuffer(内存映像缓冲器)类,表示一个磁盘文件在内存缓冲区的一个字节映像。之所以要将磁盘文件映射到内存,是因为对于内存的读写其速度比对于硬盘的读写要快。
2、文件通道
java.nio.channels包中FileChannel(文件通道类)就是为磁盘文件映入内存提供一个通道。该通道可通过FileInputStream.getChannel()方法获得。FileChannel.map()方法用来将文件映入内存。所要映射的磁盘文件名以FileInputStream构造方法的参数形式出现。
3、CRC32类
CRC(Cyclic Redundancy Check,循环冗余校验)技术用在数字传输技术领域,以传输的可靠性为目的,进行差错控制。CRC编码简单,误判率低,在数字传输入 系统得到广泛应用。在java.util.zip包中,有一些计算CRC校验和的类。
java.util.zip.CRC32类:
①void update(int c),用指定字节(例如文件输入流所读入的字符)进行CRC更新。
②long getValue(),取CRC—32校验值。
输入输出流和正则表达式
1、Pattern类
在J2SE1.4的java.util.tegea正则表达式包中,有一个模式(Pattern)类。该类的static Pattern compile(String expression,int flags)方法用于将正则表达式字符串编译成模式对象来进行快速模式匹配。
参数expression表示一个正则表达式。参数flags表示表达式字符的某些属性:
①CASE_INSENSITIVE:不区分美国ASCII码的大小写。
②UNICODE_CASE:当和CASE_INSENSITIVE一起使用时,使用Unicode码。
③MULTILANE:⌒和$匹配行首和行尾。
④UNIX_LINES:在多行模式里匹配⌒和$时,只有\n表示行结束符
⑤DOTALL:符号.用匹配任何字符,包括行结束符。
⑥CANON_EQ:考虑等价于Unicode字符的规范表达方式。
Matcher类
J2SE1.4的java.util.regex包中另一个类是匹配器(Matcher)类。该类用于将一个输入字符串input模式串pattern相比较。