您的位置:首页 > 其它

InputStrean字节流

2016-01-16 19:38 465 查看
读文件:(InputStream类)

int read(); 读取一个字节数据,当返回-1是则读取完毕
int read(byte[] b); 将数据读取到字节数组中
int read(byte[] b,int off,int len); 从off开始,最多len长度,保存b
void close(); 关闭
int available(); 返回估计字节数
一般使用其子类FileInputStream(介质流,从本地文件读);构造方法:
FileInputStream(File file); FileInputStream(String name);
注:文件不存在,报错

在判断文件是否读完:
判断文件是否存在,然后判断文件是否为空(因为read并不会因文件为空而返回-1)。* 如果存在且不为空,则读取

byte[] b = new byte[1024];
int len = 0;
while(len!=-1){
System.out.println( is.read(b)); //不用len接收,就会导致读取两遍(无法避免)
}
os.close(); //关闭流

写文件:(OutputStream类)
void write(int c); 写入一个字节的数据
void write(byte[] but); 写入数组but的所有字节
void write(byte[] b,int off,int len); 从off开始,长度为len,输出
void close(); 关闭;

一般使用其子类FileOutputStream(介质流,向本地文件写);构造方法:
FileOutputStream(File file); FileOutputStream(String name);

FileOutputStream(String name,boolean add); //add代表是否追加
注:文件不存在,创建;存在但是目录,报错

二进制文件的读写:
读:FileInputStream 的子类 DatalnputStream 其中有readUTF()方法能读utf-8的字符编码
写:FileOutputStream的子类 DataOutStream 其中有writObject()可以用来读对象
注:FileInputStream与FileOutputStream都是装饰流
示例(对象的序列化与反序列化):
被读写类需实现:implements Serializable接口
写:

OutputStream os = new FileOutputStream("c:\\data.dat");
DataOutputStream dos = new DataOutputStream(os);
dos.writeInt(stu.getSid()); // 写对象属性
dos.writeBoolean(stu.isFlag());
//直接写入类dos.writeObject(类名); ObjectOutputStream dos = new ObjectOutputStream(os); 或XmlEncoder类的writeObject方法
dos.flush();
dos.close();
os.close();

读:

使用readObject();再强转就能拿到对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: