java IO流之-----字节流的操作
来源:互联网 发布:学人工智能10本必看书 编辑:程序博客网 时间:2024/06/06 02:18
java IO流
IO流的概述
IO流:(输入输出流)
流是一组顺序的,有起点和终点的字节结合,是对数据传输的的总称和抽象。数据在设备之间的传输称为流。流的本质是数据传输,根据数据传输的特性将流抽象为各种类,方便直观的进行数据操作。
分类:
处理数据的类型:
字节流和字符流
流向的不同:输入流和输出流
IO流的关系图:
OutPutStream 类(输出字节流):输出流接收输出字节并将这写字节发送到某个接收器
提供了如下方法:
close():关闭流、
void flush():刷新输出流并强制写出所有缓冲的输出字节
以及各种的write()。
实际操作需要其子类:
对文件的操作需要字节流。
字节输出流
文件操作代码如下:
public class demo1 {
//字节输出流的方式1每次输出一个字 节
public static void Write1 () {
try {
//创建一个文件字节输出流
OutputStream ow = new FileOutputStream("g:\\java.txt");
String info = "hello ,IO";
ow.write(3);// 向文件中输出
byte [] bytes=info.getBytes();
int j = bytes.length;
for (int i = 0 ;i<j; i++) {
ow.write(bytes[i]);
}
System.out.println("Done!!!!!!");
ow.close();//关闭流
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Write1 ();
}
}
当然对于write也有其他方法,按照上面的一次输入一个字节的话效率会有点底,此是可以使用传入一个字节数组提高效率。
字节输入流:
此类表示所有字节输入流的超类
提供的方法:
read ():从输入流中读取下一个字节 (从子节输入流读取一个字节,如果没有输入可用,将阻塞),如果到达文件末尾则返回-1
read (byte[]):从输入流中读取一定量的字节,并将其存在缓冲区数组b中
FilleInputStream():从文件系统中的某个文件中获得输入字节,用于读取图像之类的原始字节流,要读取字符流应使用FileReader。
读取如下:
public class demo2 {
public static void Reade() {
try {
// 构造字节输入流
InputStream in = new FileInputStream("g:\\java.txt");
int b= -1 ;
while ((b= in.read())!=-1) {
System.out.print((char)b);
}
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
Reade();
}
}
当然一个字节一个字节读,的速度是最慢的因此一般不这么使用
使用如下方法(直接读入一个字节数组中)
根据文件大小创建数组长度,然后将数据读入创建好的数组,
代码如下:
{
File f = new File ("g:\\java.txt");
// 构造字节输入流
InputStream in = new FileInputStream(f);
byte [] bytes = new byte [ (int) f.length()];// 根据文件大小构造字节数组
int len= in.read(bytes);
System.out.println(new String (bytes));
System.out.println("length"+len);
in.close();
}
但此方法依然存在缺陷,存在内存溢出的风险(使用于读取小的文本文件)因此需要优化
这里不在指定字节数组长度为文件长度,而是根据文件的大小自己指定大小
如下:
File f = new File ("g:\\java.txt");
// 构造字节输入流
InputStream in = new FileInputStream(f);
byte [] bytes = new byte [20]; //这里测试指定较小的值实际中可以根据自己文件大小定义
int len = -1;
StringBuffer sb = new StringBuffer();
while ((len =in.read(bytes))!=-1) {
sb.append(new String (bytes,0,len));
}
in.close();
System.out.println(sb);
这样读取数据的“性能”是比较好的,但是应该注意的是
sb.append(new String (bytes,0,len));
在读取的时候一定要使用len的参数,因为上面的方式读取的话是按照次数度的(文件总长度/字节数组长度)因此如果不指定长度的话,最后一次可能会重复读入导致输出的结果不准确。因此切记一定要指定长度。
- java IO流之-----字节流的操作
- Java的IO之字节流(stream)
- java的IO之字节流
- Java IO操作之字节流和字符流
- Java IO之字节流
- Java IO之字节流
- Java IO之字节流
- Java IO 之字节流
- Java IO之字节流
- Java IO之字节流
- java IO 之 字节流
- java IO总结之字节流操作控制台输入输出
- java IO总结之字节流操作文件读写
- java io流的使用之字节流与字符流的操作
- java——io流:字节流的操作
- java实现简单的IO字节流读写操作
- 82、java的IO操作-字节缓冲流
- java字节流字符流IO操作
- 素数筛选法
- mac远程桌面连接无法验证您希望连接的计算机的身份
- 项目37.2 单位转换对照表
- 浅析c++中的类型转换--static_cast
- solr 5.4 创建core
- java IO流之-----字节流的操作
- nginx配置学习-nginx控制
- OC中的NSDate
- PIC驱动继电器
- java23种设计模式之适配器模式(Adapter)
- 字符流和字节流(二)
- oracle 表空间
- 手机usb线的区别
- 如何跳过Nexus 7二代的开机设置