javaIO--字节流

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

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

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

流分为字节流和字符流

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

  1 public class IOtest {
  2
  3     public static void main(String[] args) throws IOException {
  4
  5 //        KeyboardInput();
  6
  7 //        byte[] buffer = {0,1,2,3,4,5,6,7,8,9};
  8 //        ByteFile afile = new ByteFile("info.txt");
  9 //        afile.writeToFile(buffer);
 10 //        afile.readFromFile();
 11 //        afile.copyFile("io2.txt");
 12
 13 //        IntFile afile = new IntFile("fileInt.txt");
 14 //        afile.writeToFile();
 15 //        afile.readFromFile();
 16
 17         Student stus[] = {new Student("张三", "男"), new Student("李四", "女"), new Student("王五", "女博士")};
 18         objectFile afile = new objectFile("students.dat");
 19         afile.writeToFile(stus);
 20         System.out.println("stus: \n" + afile.readFromFile());
 21     }
 22
 23     //标准输入输出
 24     public static void KeyboardInput() throws IOException{
 25         System.out.print("Input:");
 26         byte buffer[] = new byte[512];    //以字节数组作为缓冲区
 27         int count = System.in.read(buffer);
 28         System.out.print("Output:");
 29         for(int i=0; i<count; i++){
 30             System.out.print(" " + buffer[i]);
 31         }
 32         System.out.println("\ncount = " + count);
 33         for(int i=0; i<count; i++){
 34             System.out.print((char)buffer[i]);
 35         }
 36     }
 37
 38     //文件字节流
 39     static class ByteFile{
 40         public String filename;
 41         public ByteFile(String filename){
 42             this.filename = filename;
 43         }
 44         //字节流写
 45         public void writeToFile(byte[] buffer) throws IOException{
 46             FileOutputStream fout = new FileOutputStream(this.filename);
 47             fout.write(buffer);
 48             fout.close();
 49         }
 50         //字节流读
 51         public void readFromFile() throws IOException{
 52             FileInputStream fin = new FileInputStream(this.filename);
 53             System.out.print(this.filename + ":");
 54             byte[] buffer = new byte[512];
 55             int count=0;
 56             while(count != -1){
 57                 count = fin.read(buffer);           //read返回值为字节数目,当为空时 返回-1
 58                 for(int i=0; i<count; i++){
 59                     System.out.print(buffer[i] + " ");
 60                 }
 61                 System.out.println(" count = " + count);
 62             }
 63             fin.close();
 64         }
 65         //文件字节流复制到filename2
 66         public void copyFile(String filename2) throws IOException{
 67             FileInputStream fin = new FileInputStream(this.filename);
 68             FileOutputStream fout = new FileOutputStream(filename2);
 69             byte[] buffer = new byte[512];
 70             int count = fin.read(buffer);                //读取输入流并返回流的大小
 71             while(count != -1){
 72                 fout.write(buffer, 0, count);
 73                 count = fin.read(buffer);
 74             }
 75             fin.close();
 76             fout.close();
 77             System.out.println("Copy file from " + this.filename + " to " + filename2);
 78         }
 79     }
 80
 81     //数据字节流(举例 整形)
 82     //把fibonacci序列值写入指定文件
 83     static class IntFile{
 84         public String filename;
 85         public IntFile(String filename){
 86             this.filename = filename;
 87         }
 88         public void writeToFile() throws IOException{
 89
 90             FileOutputStream fout = new FileOutputStream(this.filename);
 91             DataOutputStream dout = new DataOutputStream(fout);
 92             short i=0,j=1;
 93             do{
 94                 dout.writeInt(i);
 95                 dout.writeInt(j);
 96                 i = (short)(i+j);
 97                 j = (short)(i+j);
 98             }while(i>0);
 99             dout.close();
100             fout.close();
101         }
102         public void readFromFile() throws IOException{
103             FileInputStream fin = new FileInputStream(this.filename);
104             DataInputStream din = new DataInputStream(fin);
105             System.out.println(this.filename + ": ");
106             while(true){
107                 try {
108                     int i = din.readInt();
109                     System.out.print(i + " ");
110                 } catch (Exception e) {
111                     break;
112                 }
113             }
114             din.close();
115             fin.close();
116         }
117     }
118
119     //对象字节流
120     //使用对象字节流读写多个学生对象到某个指定文件
121     static class objectFile{
122         String filename;
123         public objectFile(String filename){
124             this.filename = filename;
125         }
126
127         public void writeToFile(Object[] objs) throws IOException{
128             FileOutputStream fout = new FileOutputStream(this.filename);
129             ObjectOutputStream obout = new ObjectOutputStream(fout);
130             for(int i = 0; i<objs.length; i++){
131                 obout.writeObject(objs[i]);
132             }
133             obout.close();
134             fout.close();
135         }
136
137         public String readFromFile() throws IOException{
138             FileInputStream fin = new FileInputStream(this.filename);
139             ObjectInputStream obin = new ObjectInputStream(fin);
140             System.out.println(this.filename + ": ");
141             String str = "";
142             while(true){
143                 try {
144                     str += obin.readObject().toString() + "\n";
145                 } catch (Exception e) {
146                     break;
147                 }
148             }
149             obin.close();
150             fin.close();
151             return str;
152         }
153     }
154     public static class Student implements Serializable{//内部类 学生对象
155
156         private String name;
157         private String sex;
158         public Student(String name, String sex){
159             this.name = name;
160             this.sex = sex;
161         }
162         public String toString(){
163             return "姓名: " + this.name + "    性别: " + this.sex;
164         }
165      }
166 }
时间: 2024-08-13 20:22:06

javaIO--字节流的相关文章

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

打算做一个系列,前面讲了基本的字符流的用法,这篇博客介绍一下字节流的基本用法: 一.基本使用: 基本字节流: FileInputStream   FileOutputStream BufferedInputStream  BufferedOutputStream 注意点,字节流和字符流的使用方式基本类似,有一点区别是使用字节流来读写文件是不需要使用flush函数的,原因: 1.字符流需要使用到flush函数将写在缓冲区的字符冲到文件,因为字符流=编码字典+字节流,事实上字符流读取的还是字节,但是

javaIO流之字节流的四种方式复制文件方式总结

/* * 需求:把e:\\a.mp4复制到当前项目目录下的copy.mp4中 * * 字节流四种方式复制文件: * 基本字节流一次读写一个字节: 共耗时:117235毫秒 * 基本字节流一次读写一个字节数组: 共耗时:156毫秒 * 高效字节流一次读写一个字节: 共耗时:1141毫秒 * 高效字节流一次读写一个字节数组: 共耗时:47毫秒 */ package cn.itcast_06; import java.io.BufferedInputStream; import java.io.Buf

JavaIO(03)字节流--FileOutputStream

IO概述: IO流用来处理设备之间的数据传输 java对数据的操作是通过流的方式 java用于操作流的对象都在IO包中 流按操作数据分为两种:字节流与字符流(编码表) 流按流向分为:输入流,输出流 IO流常用基类 java.io包中的流的基本操作主要有:字节流和字符流 字节流的抽象基类: InputStream: 进入程序的流 OutputStream:流出程序的流 在字节流中输出数据主要使用OutputStream类完成,输入使用的是InputStream类: 字符流的抽象基类: Reader

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

字节流和字符流的区别: 直接根据图片得出结论: 结论: 字节流在操作时本身不会用到缓存区,是在文件本身直接操作的,而字符流在操作时使用了缓存区,通过缓存区在操作文件: 所以在操作字符流的时候一定要关闭输出流,如果不关闭输出流,可以使用flush()方法强制清空缓存区,这样也会将缓存区的数据刷到文件中:

javaIo——运用字节流完整复制文件夹及文件

突发奇想要写一段全部复制文件夹的代码,可以复制一个文件夹到任何目录(包括盘符根目录或者文件夹根目录),感觉自己写的很冗余,新手希望大牛指点一下! public class Test { int a = 0; static File startPath = null; static File endPath = null; public static void main(String[] args) throws IOException { Scanner input = new Scanner(

Java—IO流 字节流

IO流(输入流.输出流),又分为字节流.字符流. 流是磁盘或其它外围设备中存储的数据的源点或终点. 输入流:程序从输入流读取数据源.数据源包括外界(键盘.文件.网络-),即是将数据源读入到程序的通信通道. 输出流:程序向输出流写入数据.将程序中的数据输出到外界(显示器.打印机.文件.网络-)的通信通道. 字节流 1.InputStream.OutputStream InputStream抽象了应用程序读取数据的方式 OutputStream抽象了应用程序写出数据的方式 2.读到文件结尾,称为EO

JavaIO再回顾

File类 JavaIO访问文件名和文件检测相关操作 分隔符最好是使用File类提供的File.separator,使程序更加的健壮. File类提供的方法基本上是见名知意,例如getName()就是获取文件名.isFile()判断是不是一个文件. public class FileTest { public static void main(String[] args) throws IOException { System.out.println(File.separator + " &qu

javaIo流

转载自:http://ggicci.blog.163.com/blog/static/2103640962012813997493/ Java : 关于 Java 流的笔记 State : Java 流分为 字符流 和 字节流 两种.分别四个抽象类 Reader/Writer.InputStream/OutputStream 表示. Hierachy : Note :    抽象类       无公共构造器      已弃用   父类/超类 -----> 子类 How to use ? Read

JavaIO简单代码实例

最近又复习了下JavaIO写了些实例代码都很简单但是能体现大部分方法的用法. IO流实现文件的拷贝   几种不同的方法: package com.wxisme.TestIO; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import jav

牛刀小试 - 详细总结Java-IO流的使用

流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流. 流的本质是数据传输,根据数据传输的不同特性将流抽象封装成不同的类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 输入流和输出流 所谓输入流和输出流,实际是相对内存而言. 将外部数据读取到Java内存当中就是所谓的输入流 而将Java内存当中的数据写入存放到外部设备当中,就是所谓的输出流 字符流和字节流 实