1.输入流,只能从中读取数据,而不能向其写出数据。输出流,只能想起写入字节数据,而不能从中读取。
2.inputstream的类型有:
bytearrayinputstream 包含一个内存缓冲区,字节从中取出。
fileinputstream 从文件中获得字节。
objectinputstream 用来恢复被序列化的对象。
pipedinputstream 管道输入流,读取管道内容。多和pipedoutputstream一起用于多线程通信。
sequenceinputstream 是多种输入流的逻辑串联,从第一个输入流读取,直到最后一个输入流。
stringbufferinputstream 读取的字节由字符串提供。
2.outputstream类型也有如下:
bytearrayoutputstream 该类实现了一个输出流,其数据被写入由byte数组充当的缓冲区,缓冲区会随着数据的不断写入而自动增长。
fileoutputstream 该类实现了一个输出流,其数据写入文件。
objectoutputstream 该类将实现了序列化的对象序列化后写入指定地方。
pipedoutputstream 管道的输出流,是管道的发送端。
3.objectstream,inputstream经常会和fileinputstream和fileoutputstream一起用。(初始化时用)
objectoutputstream objectoutputstream = new objectoutputstream(new fileoutputstream(logon.out));
4.file类并不是指一个文件,也代表一系列文件的名字,如果代表一个文件集,可用list()方法查询这个集。
5.streamtokenizer用于将任何inputstream分割为一系列几号,stringtokenizer提供了与 streamtokenizer极相似的功能,不过是针对字符串的,感觉和c#的split()方法类似。
6.用zip对文件进行压缩时的步骤:
首先生成压缩文件:
fileoutputstream f =new fileoutputstream(test.zip);
checkedoutputstream csum =new checkedoutputstream(
f, new adler32());
zipoutputstream out =new zipoutputstream(new bufferedoutputstream(csum));
out.setcomment(a test of java zipping);//压缩文件注释信息
然后要把要压缩的文件添加进去:
out.putnextentry(new zipentry(test.txt);
之后如果有需要还可以继续向文件中写入别的东西,但必须保证out类中已经有zipentry类了。
源代码:
import java.io.*;import java.util.*;import java.util.zip.*;public class zipcompress {public static void main(string[] args) {try {
fileoutputstream fileoutputstream = new fileoutputstream(test.zip);
checkedoutputstream csum = new checkedoutputstream(fileoutputstream, new adler32());
zipoutputstream outputstream = new zipoutputstream(new bufferedoutputstream(csum));
outputstream.setcomment(a test of java zipping);
system.out.println(writing file + zip.txt);
bufferedreader in = new bufferedreader(new filereader(zip.txt));
outputstream.putnextentry(new zipentry(zip.txt));// int c;// while ((c = in.read()) != -1) {// outputstream.write(c);// }// in.close();outputstream.write(123.getbytes());
outputstream.close();
system.out.println(checksum: + csum.getchecksum().getvalue());
system.out.println(reading file);
fileinputstream fileinputstream = new fileinputstream(test.zip);
checkedinputstream csumi = new checkedinputstream(fileinputstream, new adler32());
zipinputstream in2 = new zipinputstream(new bufferedinputstream(csumi));
zipentry zipentry;
system.out.println(checksum: + csumi.getchecksum().getvalue());while ((zipentry = in2.getnextentry()) != null) {
system.out.println(reading file: + zipentry);int x;while ((x = in2.read()) != -1) {
system.out.println(x);
}
}
in2.close();
zipfile zf = new zipfile(test.zip);
enumeration e = zf.entries();while (e.hasmoreelements()) {
zipentry ze2 = (zipentry) e.nextelement();
system.out.println(file: + ze2);
}
} catch (exception e) {
e.printstacktrace();
}
}
}
7.serialization和externalizable接口的区别,两者都是可以对类进行序列化的接口,不同的是serialization默认会把对象的所有全都序列化,而externalizable是可以对序列化的部分进行控制,也就是部分序列化。
8.serialization控制序列化的方法:(1)应用transient(临时)关键字。
(2)我们可以实现 serializable接口,并添加(注意是“添加”,而非“覆盖”或者“实现”)名为writeobject()和 readobject()的方法。一旦对象被序列化或者重新装配,就会分别调用那两个方法。
以上就是java中io流是什么意思?的详细内容。