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. 第28章 LTDC—液晶显示中英文

    本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.库帮助文档<STM32F779xx_User_Manual.chm>. 关于开发板配 ...

  2. js 中 函数的返回值问题

    var result=''; function searchByStationName( address ) { // map.clearOverlays();//清空原来的标注 var keywor ...

  3. java中exception和error有什么区别,运行时异常和一般异常有什么区别

    1.exception和error都是继承了throwable类,在java中只有throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型 2.ex ...

  4. mysql update 子查询锁表问题

    mysql在Update带有子查询的时候,子查询的表会锁住,导致该表无法使用.比如 update A set comments = (select count(1) from B where id = ...

  5. meven 配置

    配置meven 自定义文件[User Settings] D:\java\apache-maven-3.5.3\conf\settings.xml settings.xml 新增两端配置信息 < ...

  6. [Doctrine Migrations] 数据库迁移组件的深入解析一:安装与使用

    场景分析 团队开发中,每个开发人员对于数据库都修改都必须手动记录,上线时需要人工整理,运维成本极高.而且在多个开发者之间数据结构同步也是很大的问题.Doctrine Migrations组件把数据库变 ...

  7. Python学习:10.Python装饰器讲解(一)

    情景介绍 一天,在你正在努力加班的时候,老板给交给你了一个任务,就是在这段代码里将所有函数开始输出一个‘hello’最后输出当前时间,再输出一个“end”,这段代码里包含了大量的函数,你会怎么做? d ...

  8. VS中添加lib与dll

    参考与拓展阅读:https://blog.csdn.net/u012043391/article/details/54972127 lib: 1.附加包含目录---添加工程的头文件目录:       ...

  9. HDOJ:6333-Problem B. Harvest of Apples(组合数学+莫队算法+逆元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6333 解题心得: 这个题可以说是十分精彩了,首先推组合数学的公式,其中一个很重要的公式是Cnm = C ...

  10. javascript array.property.slice.call

    function foo() { //var var1=Array.prototype.slice.call(arguments); var var1=[].slice.call(arguments) ...