2011-02-17 元宵节 几天以来的思想斗争我终于决定辞掉自己的第一份工作,坚定了一个想法——北上求取技术真经。看了一天的视频,有点累、欣慰的是自己找到了那久违的满足感,自离校以来很少有时间再去接受技术知识的洗礼了,确实是久违了。辞掉了第一份工作有些纠结,但是我坚信今天的决定是献给多年后自己的一个最好礼物。下面就小晒一下自己今天的收获喽…………
java中IO流的零碎 ↓
① RandomAccessFile:
首先是自己一直都不太注意的类(RandomAccessFile)原来可以这麽强大
顾名思义该类支持文件的随机访问,该特性使其在网络文件的断点续传、以及多线程下载中大有用武之地。
构造方法:
new RandomAccessFile("F","rw") //读写方式
new RandomAccessFile("F","r") //只读方式
在构造实例时可以指定操作权限——
值
含意
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出IOException
。
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于
"rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd"
打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
主要方法:
public int skipBytes(int n) throws IOException //尝试跳过输入的 n 个字节以丢弃跳过的字节。
public void seek(long pos) throws IOException //设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。偏移量的设置可能会超出文件末尾。偏移量的设置超出文件末尾不会改变文件的长度。只有在偏移量的设置超出文件末尾的情况下对文件进行写入才会更改其长度。
②节点流类:
InputStream OutputStream
FileInputStream FileOutputStream
Reader Writer
PipedInputStream PipedOutputStream
ByteArryInputStream ByteArryOutputStream
流:字节序列的抽象概念
文件:数据的静态存储形式 流:数据传输时的形态。
流 分为--节点流 过滤流
类的讲解: InputStream(描述所有输入流类的抽象概念)
重要方法:
int read();结束时返回-1;
@overload int read(byte[] b);
int read(byte [] b,int off,int len);
long skip(long n);// 跳过和丢弃此输入流中数据的 n 个字节。
int available();//返回可读的字节数、如果到达输入流末尾,则返回 0。
void mark(int readlimit);//readlimit 参数告知此输入流在标记位置失效之前允许读取的字节数和 void reset()//(将此流重新定位到最后一次对此输入流调用 mark 方法时的位置)方法配合使用
boolean markSupported();//判断当前流是否支持mark() reset();
void close()//主要作用是释放相关联的系统资源
OutputStream//向文件写入数据流类的基类
void write(int b)
@overload void write(byte[] b);
void writ(byte[] b, int off, int len)
void flush();//刷新缓冲区 将缓冲区的内容写入到外部设备 只有使用了缓冲区的类才可以调用此方法。
void close();//释放相关联的系统资源
FileInputStream 和 FileOutputStream(字节流)
创建FileInputStream时 文件必须可读的
创建FileOutputStream时 文件若存在内容将被覆盖 可以指定不存在的文件 但是不能指定已在其他应用程序中打开的文件。
③Reader 和 Writer (字符流)
所有字符流类的抽象基类,用于简化对字符串的输入输出编程 及用于读写文本文件
文本文件系特殊的二进制文件。
InputStream 与OutputStream(字节流)及其子类主要用于读写二进制文件
Reader 和 Writer (字符流)主要用于对文本文件的操作。
public int read(char[] cbuf)
throws IOException
FileOutputStream 中的write(byte[] b),自动调用了void flush()方法。
PipedInputStream 与PipedOutputStream 类
用于在应用程序中的 创建管道通信。
PipedWriter 和 PipedReader类
主要用于字符流通信。
ByteArrayInputStream 和ByteArrayOutputStream 类
用于以IO流的方式来完成对字节数组内容的读写。来支持类似内存虚拟文件或者内存映像文件的功能。
过滤流与包装类
BufferedInputStream 与BufferedOutputStream
DataInputStream与DataOutputStream
DataOutputStream
writeBytes(String s);
writeChars(String s);
writeUTF(String s);
DataInputStream
只有 String readUTF(); 无readBytes();和readChars();
PrintStream
提供了一系列的print与println方法可以将基本的数据格式化成字符串输出。
与printStream相对应还有一个类PrintWriter
PrintWriter的println()可以根据不同的操作系统生成不同的换行符。
ObjectInputStream与ObjectOutputStream
用于从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流。被读写的对象必须实现了Serializable接口。对象中的transient和static类型的成员变量不会被读写
字节流与字符流的转换
InputStreamReader 可以将一个字节流中的字节解码成字符后读取
OutputStreamWriter 将字符编码成字节后写入到一个字节流中。
避免频繁的在字节和字符之间进行转换,最好不要直接使用InputStreamReader和OutputStreamWriter类来读写数据,应尽量使用BufferedWriter类包装OutputStreamWriter,用BufferedReader类包装InputStreamReader.
java程序与其他进程的数据通信
可以用Process类的实例对象来表示子进程。
调用process的getOutputStream和getInputStream方法获得连接到子进程的输出流和输入流对象。
字符输出流类