流---是指的一组有序的、有气垫和重点的字节集合,是对的护具传输的总称或者抽象。

流采用缓冲区技术,当写一个数据时,系统将数据发送到缓冲区而不是外部设备(如硬盘),当读一个数据时,系统实际是从缓冲区读取数据的。

流的存在:我们都知道输入流和输出流,二者的定义都是基于数据流向且是以内存为坐标的。标准输入过程中,数据从键盘等输入设备流向内存,这事输入流。标准输出过程中,数据从内存输出到显示器或者打印机等设备,这是输出流。

流分为字节流和字符流

下边主要讲标准输入输出、文件字节流、数据字节流和对象字节流四种字节流。

 public class IOtest {

     public static void main(String[] args) throws IOException {

 //        KeyboardInput();

 //        byte[] buffer = {0,1,2,3,4,5,6,7,8,9};
// ByteFile afile = new ByteFile("info.txt");
// afile.writeToFile(buffer);
// afile.readFromFile();
// afile.copyFile("io2.txt"); // IntFile afile = new IntFile("fileInt.txt");
// afile.writeToFile();
// afile.readFromFile(); Student stus[] = {new Student("张三", "男"), new Student("李四", "女"), new Student("王五", "女博士")};
objectFile afile = new objectFile("students.dat");
afile.writeToFile(stus);
System.out.println("stus: \n" + afile.readFromFile());
} //标准输入输出
public static void KeyboardInput() throws IOException{
System.out.print("Input:");
byte buffer[] = new byte[512]; //以字节数组作为缓冲区
int count = System.in.read(buffer);
System.out.print("Output:");
for(int i=0; i<count; i++){
System.out.print(" " + buffer[i]);
}
System.out.println("\ncount = " + count);
for(int i=0; i<count; i++){
System.out.print((char)buffer[i]);
}
} //文件字节流
static class ByteFile{
public String filename;
public ByteFile(String filename){
this.filename = filename;
}
//字节流写
public void writeToFile(byte[] buffer) throws IOException{
FileOutputStream fout = new FileOutputStream(this.filename);
fout.write(buffer);
fout.close();
}
//字节流读
public void readFromFile() throws IOException{
FileInputStream fin = new FileInputStream(this.filename);
System.out.print(this.filename + ":");
byte[] buffer = new byte[512];
int count=0;
while(count != -1){
count = fin.read(buffer); //read返回值为字节数目,当为空时 返回-1
for(int i=0; i<count; i++){
System.out.print(buffer[i] + " ");
}
System.out.println(" count = " + count);
}
fin.close();
}
//文件字节流复制到filename2
public void copyFile(String filename2) throws IOException{
FileInputStream fin = new FileInputStream(this.filename);
FileOutputStream fout = new FileOutputStream(filename2);
byte[] buffer = new byte[512];
int count = fin.read(buffer); //读取输入流并返回流的大小
while(count != -1){
fout.write(buffer, 0, count);
count = fin.read(buffer);
}
fin.close();
fout.close();
System.out.println("Copy file from " + this.filename + " to " + filename2);
}
} //数据字节流(举例 整形)
//把fibonacci序列值写入指定文件
static class IntFile{
public String filename;
public IntFile(String filename){
this.filename = filename;
}
public void writeToFile() throws IOException{ FileOutputStream fout = new FileOutputStream(this.filename);
DataOutputStream dout = new DataOutputStream(fout);
short i=0,j=1;
do{
dout.writeInt(i);
dout.writeInt(j);
i = (short)(i+j);
j = (short)(i+j);
}while(i>0);
dout.close();
fout.close();
}
public void readFromFile() throws IOException{
FileInputStream fin = new FileInputStream(this.filename);
DataInputStream din = new DataInputStream(fin);
System.out.println(this.filename + ": ");
while(true){
try {
int i = din.readInt();
System.out.print(i + " ");
} catch (Exception e) {
break;
}
}
din.close();
fin.close();
}
} //对象字节流
//使用对象字节流读写多个学生对象到某个指定文件
static class objectFile{
String filename;
public objectFile(String filename){
this.filename = filename;
} public void writeToFile(Object[] objs) throws IOException{
FileOutputStream fout = new FileOutputStream(this.filename);
ObjectOutputStream obout = new ObjectOutputStream(fout);
for(int i = 0; i<objs.length; i++){
obout.writeObject(objs[i]);
}
obout.close();
fout.close();
} public String readFromFile() throws IOException{
FileInputStream fin = new FileInputStream(this.filename);
ObjectInputStream obin = new ObjectInputStream(fin);
System.out.println(this.filename + ": ");
String str = "";
while(true){
try {
str += obin.readObject().toString() + "\n";
} catch (Exception e) {
break;
}
}
obin.close();
fin.close();
return str;
}
}
public static class Student implements Serializable{//内部类 学生对象 private String name;
private String sex;
public Student(String name, String sex){
this.name = name;
this.sex = sex;
}
public String toString(){
return "姓名: " + this.name + " 性别: " + this.sex;
}
}
}

javaIO--字节流的更多相关文章

  1. Java-IO 字节流的使用和效率比较

    打算做一个系列,前面讲了基本的字符流的用法,这篇博客介绍一下字节流的基本用法: 一.基本使用: 基本字节流: FileInputStream   FileOutputStream BufferedIn ...

  2. javaio字节流复制文件夹

    public class Copy1 { public static void main(String[] args) throws IOException { File src=new File(& ...

  3. JavaIO学习:字节流

    JavaIO流之字节流 字节流 抽象基类:InputStream,OutputStream. 字节流可以操作任何数据. 注意: 字符流使用的数组是字符数组,char[] chs : 字节流使用的数组是 ...

  4. java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片

    package com.lp.ecjtu; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...

  5. javaIO(05)字节流和字符流的区别

    字节流和字符流的区别:   直接根据图片得出结论: 结论:   字节流在操作时本身不会用到缓存区,是在文件本身直接操作的,而字符流在操作时使用了缓存区,通过缓存区在操作文件:  所以在操作字符流的时候 ...

  6. JavaIO(03)字节流--OutputStream and InputStream

    IO概述:   IO流用来处理设备之间的数据传输 java对数据的操作是通过流的方式 java用于操作流的对象都在IO包中 流按操作数据分为两种:字节流与字符流(编码表) 流按流向分为:输入流,输出流 ...

  7. Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、

    LineNumberReader 跟综行号的缓冲字符输入流,些类定义了setLineNumber(int)和getLineNumber(int),它们可分别用于设置和获取当前行号 import jav ...

  8. 总结JAVA----IO流中的字节流

    对于IO流中字节流的总结 字节流的概念 由于应用程序,经常需要和文件打交道,所以Inputstream专门提供了读写文件的子类:FileInputStream和FileOutputStream类,如果 ...

  9. java-IO流-字节流-概述及分类、FileInputStream、FileOutputStream、available()方法、定义小数组、BufferedInputStream、BufferedOutputStream、flush和close方法的区别、流的标准处理异常代码

    1.IO流概述及其分类 * 1.概念      * IO流用来处理设备之间的数据传输      * Java对数据的操作是通过流的方式      * Java用于操作流的类都在IO包中      *  ...

  10. JavaIO流原理之常用字节流和字符流详解以及Buffered高效的原理

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827509.html      Java的流体系十分庞大,我们来看看体系图:        这么庞大的体系里面 ...

随机推荐

  1. Android中的AutoCompleteTextView(随笔提示文本)组件的简单使用

    Android中的随笔提示文本组件AutoCompleteTextView的使用,此组件用于输入文本,然后就会在所配置的适配器中的数据进行查找显示在组件下面. 这里值得注意的是AutoComplete ...

  2. MapReduce之Reduce Join

    一 介绍 Reduce Join其主要思想如下: 在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag), 比如:t ...

  3. python中如何退出多层循环

    1.定义标记变量:利用变量值的变化退出循环 # 第一种嵌套形式 a = [[1, 2, 3], [5, 5, 6], [7, 8, 9]] # init_i = 0 # init_j = 0 flag ...

  4. js分片上传大文件,前端代码

    首先导入jQuery.form.js文件,下面src是相对于改js文件位置, <script type="text/JavaScript" src="jquery/ ...

  5. 理解golang中的channel

    channel是goroutine之间的通信机制.可以类比线程间的通信,线程间的通信有多种方式,比如线程上下文.共享内存.IPC通信.socket实现不同机器间的通信. channel用起来很简单,绑 ...

  6. C语言跳水比赛预测结果

    5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三:B选手说:我第二,E第四:C选手说:我第一,D第二:D选手说:C最后,我第三:E选手说:我第四,A第一:比赛结束后,每 ...

  7. MP3 编码解码 附完整c代码

    近期一直不间断学习音频处理,一直也没想着要去碰音频编解码相关. 主要是觉得没什么实际的作用和意义. 不管视频编解码,图像编解码,音频编解码,都有很多组织基金在推动. 当然,在一些特定的情景下,需要用起 ...

  8. 实验1 查看CPU和内存,用机器指令和汇编指令编程

    ·实验任务 (1)使用Debug,用E命令和A命令以两种方式将指令写入内存 机器码        汇编指令 b8 20 4e    mov ax,4e20h 05 16 14    add ax,14 ...

  9. C# WebBrowser的DrawToBitmap方法 截取网页保存为图片

    bool mark = true;         private void btnOpen_Click(object sender, EventArgs e)         {           ...

  10. 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单

    调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模 ...