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学习笔记-10.io流的更多相关文章

  1. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  2. 【原】Java学习笔记033 - IO

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:继承关系中爷 ...

  3. JavaSE 学习笔记之IO流(二十二)

    IO流:用于处理设备上数据. 流:可以理解数据的流动,就是一个数据流.IO流最终要以对象来体现,对象都存在IO包中. 流也进行分类: 1:输入流(读)和输出流(写). 2:因为处理的数据不同,分为字节 ...

  4. Java学习笔记--文件IO

    简介 对于任何程序设计语言,输入和输出(Input\Output)都是系统非常核心的功能,程序运行需要数据,而数据的获取往往需要跟外部系统进行通信,外部系统可能是文件.数据库.其他程序.网络.IO设备 ...

  5. java学习笔记之IO编程—内存流、管道流、随机流

    1.内存操作流 之前学习的IO操作输入和输出都是从文件中来的,当然,也可以将输入和输出的位置设置在内存上,这就需要用到内存操作流,java提供两类内存操作流 字节内存操作流:ByteArrayOutp ...

  6. Java编程思想学习笔记_5(IO流)

    一.用DataInputStream读取字符 可以使用available方法查看还有多少可供存取的字符.示例如下: public class Test1 { public static void ma ...

  7. java学习笔记之IO编程—字节流和字符流

    1. 流的基本概念 在java.io包里面File类是唯一一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操 ...

  8. java学习笔记之IO编程—打印流和BufferedReader

    1.打印流(PrintWriter) 想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一 ...

  9. Java学习笔记之——IO

    一. IO IO读写 流分类: 按照方向:输入流(读),输出流(写) 按照数据单位:字节流(传输时以字节为单位),字符流(传输时以字符为单位) 按照功能:节点流,过滤流 四个抽象类: InputStr ...

随机推荐

  1. div样式position:fixed,不随屏幕滚动而滚动,导致屏幕太小时弹出层被遮挡,无法滚动查看的解决办法

    window.onscroll = function () { var sl = -Math.max(document.body.scrollTop, document.documentElement ...

  2. 复习宝典之Redis

    查看更多宝典,请点击<金三银四,你的专属面试宝典> 第八章:Redis Redis是一个key-value的nosql数据库.先存到内存中,会根据一定的策略持久化到磁盘,即使断电也不会丢失 ...

  3. linux简单文件管理命令的使用

    在linux系统中,命令的使用要方便于图形界面的使用,上一个博客介绍了如何使用PuTTy远程登录linux,当然,我使用的是本地登录(手动滑稽) 经过一星期课余时间的了解,大致了解了一些简单的文件管理 ...

  4. 05JavaScript语句

    1.JavaScript 语句 JavaScript 语句是发给浏览器的命令. 这些命令的作用是告诉浏览器要做的事情. 2.分号 ; 分号用于分隔 JavaScript 语句. 通常我们在每条可执行的 ...

  5. MAC系统 输入管理员账户密码 登录不上

    mac新系统改密码~管理员 升级10.13.2后,很多不会操作了, 那天把系统管理员设置成了普通管理,就不能打开个别软件了, 贼尴尬~~~ 后来找blog才解决,现在分享下~~ http://www. ...

  6. 微信小程序上滑加载更多

    onReachBottom: function () { var that = this var limit = that.data.limit var count = that.data.count ...

  7. 使用GlobalKey启动APP

    按键输入有三种:system key  音量键 global key 按下启动某个APP user key  ABCD... 给安卓应用程序定义一个广播接收者,写一个BroadcastReceiver ...

  8. Qt udp 主机和虚拟机无法互相广播

    描述: 主机和虚拟机可以ping通,port没被占用,虚拟机可以向主机广播,但是主机不能向虚拟机广播 原因: 虚拟机只配置了一个适配器,而主机有多个适配器,当虚拟机广播时,只能使用和主机连接的适配器, ...

  9. program files与program files(x86)的区别

    简单来说:Program Files (x86)存放了一些32位的系统文件.它和正常的Program Files以及Windows文件夹一样,都属于系统文件夹,请勿随意改动. 64位Windows中提 ...

  10. 成都Uber优步司机奖励政策(2月22日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...