当前位置 : IT培训网 > Java开发 > Java教程 > Java编程开发面向字节流的应用

Java编程开发面向字节流的应用

时间:2016-08-31 14:06:57  来源:Java培训网  作者:IT培训网  已有:名学员访问该课程
FileDescriptor 是 java.io 中的一个类,该类不能实例化,其中包含三个静态成员:in、out 和err,分别对应于标准输入流、标准输出流和标准错误流,利用它们可以在标准输入输出流上建立文件输入输出

关于Java方面的知识点已经介绍很多了,随着社会的发展,很多人都希望可以借助Java实现高薪就业,那么选择了Java就要用心学习了,否则也将难以就业,下面就是IT培训网小编为大家总结的关于:“Java编程开发面向字节流的应用”方面的知识点,希望大家喜欢。

文件输入输出流

文件输入输出流 FileInputStream 和 FileOutputStream 负责完成对本地磁盘文件的顺序输入输出操作。

【例 10-5】通过程序创建一个文件,从键盘输入字符,当遇到字符“#”时结束,在屏幕上显示该文件的所有内容。

//********** ep10_5.java **********

import java.io.*;

class ep10_5{

    public static void main(String args[]){

        char ch;

        int data;

        try{

            FileInputStream a=new FileInputStream(FileDescriptor.in);  //创建文件输入流对象

            FileOutputStream b=new FileOutputStream("ep10_5");  //创建文件输出流对象

            System.out.println("请输入字符,以#号结束:");

            while((ch=(char)a.read())!='#'){

                b.write(ch);

            }

            a.close();

            b.close();

            System.out.println();

            FileInputStream c=new FileInputStream("ep10_5");

            FileOutputStream d=new FileOutputStream(FileDescriptor.out);

            while(c.available()>0){

               data=c.read();

               d.write(data);

           }

           c.close();d.close();

       }

       catch(FileNotFoundException e){

          System.out.println("找不到该文件!");

       }

       catch(IOException e){}

    }

}

运行后在程序目录建立一个名称为 ep10_5 的文件,运行结果如图 10-8 所示:

Java编程开发面向字节流的应用_www.itpxw.cn

图 10-8  例 10_5 运行结果

FileDescriptor 是 java.io 中的一个类,该类不能实例化,其中包含三个静态成员:in、out 和err,分别对应于标准输入流、标准输出流和标准错误流,利用它们可以在标准输入输出流上建立文件输入输出流,实现键盘输入或屏幕输出操作。

【例 10-6】实现对二进制图形文件(.gif)的备份。

//********** ep10_6.java **********

import java.io.*;

class ep10_6{

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

        FileInputStream a=new FileInputStream("ep10_6.gif");

        FileOutputStream b=new FileOutputStream("ep10_6_a.gif");

        System.out.println("文件的大小为:"+a.available());

        byte c[]=new byte[a.available()];

        a.read(c);  //将图形文件读入数组

        b.write(c);  //将数组中的数据写入到新文件中

        System.out.println("文件已经被更名复制!");

        a.close();

        b.close();

    }

}

运行后在程序目录备份了一个名称为 ep10_6_a.gif 的文件,运行结果如图 10-9 所示:

Java编程开发面向字节流的应用_www.itpxw.cn

图 10-9  例 10_6 运行结果

过滤流

FilterInputStream 和 FileOutputStream 是 InputStream 和 OutputStream 的直接子类,分别实现了在数据的读、写操作的同时能对所传输的数据做指定类型或格式的转换,即可实现对二进制字节数据的理解和编码转换。

常用的两个过滤流是数据输入流 DataInputStream 和数据输出流 DataOutputStream。其构造方法为:

    DataInputStream(InputStream in);  //创建新输入流,从指定的输入流 in 读数据

    DataOutputStream(OutputStream out);  //创建新输出流,向指定的输出流 out 写数据

由于 DataInputStream 和 DataOutputStream 分别实现了 DataInput 和 DataOutput 两个接口(这两个接口规定了基本类型数据的输入输出方法)中定义的独立于具体机器的带格式的读写操作,从而实现了对不同类型数据的读写。由构造方法可以看出,输入输出流分别作为数据输入输出流的构造方法参数,即作为过滤流必须与相应的数据流相连。

DataInputStream 和 DataOutputStream 类提供了很多个针对不同类型数据的读写方法,具体内容读者可参看 Java 的帮助文档。

【例 10-7】将三个 int 型数字 100,0,-100 写入数据文件 ep10_6.dat 中。

//********** ep10_7.java **********

import java.io.*;

class ep10_7{

    public static void main(String args[]){

        String fileName="ep10_7.dat";

        int value1=100,value2=0,value3=-100;

        try{

            //将 DataOutputStream 与 FileOutputStream 连接输出不同类型的数据

            DataOutputStream a=new DataOutputStream(new FileOutputStream(fileName));

            a.writeInt(value1);

            a.writeInt(value2);

            a.writeInt(value3);

            a.close();

        }

        catch(IOException i){

            System.out.println("出现错误!"+fileName);

        }

    }

}

 

运行后在程序目录中生成数据文件 ep10_7.dat,用文本编辑器打开后发现内容为二进制的:

00 00 00 64 00 00 00 00 FF FF FF 9C。

【例 10-8】读取数据文件 ep10_6.dat 中的三个 int 型数字,求和并显示。

//********** ep10_8.java **********

import java.io.*;

class ep10_8{

    public static void main(String args[]){

        String fileName="D:\\myjava/ep10_7.dat";

        int sum=0;

        try{

            DataInputStream a=new DataInputStream(new BufferedInputStream(new FileInputStream(fileName)));

            sum+=a.readInt();

            sum+=a.readInt();

            sum+=a.readInt();

            System.out.println("三个数的和为:"+sum);

            a.close();

        }

        catch(IOException e){

            System.out.println("出现错误!"+fileName);

        }

    }

}

 

运行结果:

三个数的和为:0

readInt 方法可以从输入输出流中读入 4 个字节并将其作为 int 型数据直接参与运算。由于已经知道文件中有 3 个数据,所以可以使用 3 个读入语句,但若只知道文件中是 int 型数据而不知道数据的个数时该怎么办呢?因为 DataInputStream 的读入操作如遇到文件结尾就会抛出 EOFException 异常,所以可将读操作放入 try 中。

try{

    while(true)

    sum+=a.readInt();

}

catch(EOFException e){

    System.out.pritnln("三个数的和为:"+sum);

    a.close();

}

EOFException 是 IOException 的子类,只有文件结束异常时才会被捕捉到,但如果没有读到文件结尾,在读取过程中出现异常就属于 IOException。

【例 10-9】从键盘输入一个整数,求该数的各位数字之和。

//********** ep10_9.java **********

import java.io.*;

class ep10_9{

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

        DataInputStream a=new DataInputStream(System.in);

        System.out.print("请输入一个整数:");

        int b=a.readInt();

        int sum=0;

        int c=b;

        while(c>0){

            int d=c%10;  //取最低位

            c=c/10;  //去掉最低位

            sum=sum+d;  //累加各位之和

        }

        System.out.println(b+"的各位数字之和="+sum);

    }

}

运行结果:

请输入一个整数:26

842403082 的各位数字之和=31

需要注意的是,输入的数据 26 为变成了 842403082,原因在于输入数据不符合基本类型数据的格式,从键盘提供的数据是字符的字节码表示方式,若输入 26,只代表 2 和 6 两个字符的字节数据,而不是代表整数 26 的字节码。

若要从键盘得到整数需要先读取字符串,再利用其他方法将字符串转化为整数。

标准输入输出

System.in、System.out、System.err 这 3 个标准输入输流对象定义在 java.lang.System 包中,这 3 个对象在 Java 源程序编译时会被自动加载。

1.      标准输入:标准输入 System.in 是 BufferedInputStream 类的对象,当程序需要从键盘上读入数据时,只需要调用 System.in 的 read()方法即可,该方法从键盘缓冲区读入一个字节的二进制数据,返回以此字节为低位字节,高位字节为 0 的整型数据。

2.      标准输出:标准输出 System.out 是打印输出流 PrintStream 类的对象。PrintStream 类是过滤输出流类 FilterOutputStream 的一个子类,其中定义了向屏幕输出不同类型数据的方法print()和 println()。

3.      标准错误输出:System.err 用于为用户显示错误信息,也是由 PrintStream 类派生出来的错误流。Err 流的作用是使 print()和 println()将信息输出到 err 流并显示在屏幕上,以方便用户使用和调试程序。

【例 10-10】输入一串字符显示出来,并显示 System.in 和 System.out 所属的类//********** ep10_10.java **********

import java.io.*;

class ep10_10{

    public static void main(String args[]){

        try{

            byte a[]=new byte[128];  //设置输入缓冲区

            System.out.print("请输入字符串:");

            int count =System.in.read(a);  //读取标准输入输出流

            System.out.println("输入的是:");

            for(int i=0;i<count;i++)

               System.out.print(a[i]+"");  //输出数组元素的 ASCII 值

            System.out.println();

            for(int i=0;i<count-2;i++)  //不显示回车和换行符

                System.out.print((char)a[i]+"");  //按字符方式输出元素

            System.out.println();

            System.out.println("输入的字符个数为:"+count);

            Class InClass=System.in.getClass();

            Class OutClass=System.out.getClass();

            System.out.println("in 所在的类为:"+InClass.toString());

            System.out.println("out 所在的类为:"+OutClass.toString());

        }

        catch(IOException e){}

    }

}

运行结果如图 10-10 所示:

Java编程开发面向字节流的应用_www.itpxw.cn

图 10-10  例 10_10 运行结果

需要注意的是,输入了 3 个字符按回车后,输出的结果显示为 5 个字符。这是由于 Java 中回车被当作两个字符,一个是 ASCⅡ为 13 的回车符,一个是值为 10 的换行符。程序中 getClass()和 ToString()是 Object 类的方法,作用分别是返回当前对象所对应的类和返回当前对象的字符串表示。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
------分隔线----------------------------
Java教程
1、Java 概述
1.1 Java语言概述
1.2 Java虚拟机以及跨平台原理
1.3 Java的主要就业方向
1.4 Java的不同版本
1.5 Java开发环境搭建
1.6 第一个Java程序示例
1.7 Java类和对象的概念
1.8 Java类库及其组织结构
1.9 Java import
2、Java 语法基础
2.1 Java数据类型以及变量的定义
2.2 Java数据类型转换
2.3 Java运算符
2.4 Java流程控制
2.5 Java数组的定义和使用
2.6 Java字符串(String)
2.7 Java StringBuffer与StringBuider
2.8 强调一下编程风格
3、Java 类与对象
3.1 Java类的定义及其实例化
3.2 Java访问修饰符
3.3 Java变量的作用域
3.4 Java this关键字详解
3.5 Java方法重载
3.6 Java类的基本运行顺序
3.7 Java包装类、拆箱和装箱详解
3.8 再谈Java包
3.9 源文件的声明规则
4、Java 继承和多态
4.1 继承的概念与实现
4.2 Java super关键字
4.3 继承中的方法的覆盖和重载
4.4 多态和动态绑定
4.5 instanceof 运算符
4.6 多态对象的类型转换
4.7 Java static关键字
4.8 Java final关键字
4.9 Java Object类
5、面向对象高级特性
5.1 Java内部类及其实例化
5.2 内部类的分类
5.3 抽象类的概念和使用
5.4 接口的概念和使用
5.5 接口和抽象类的区别
5.6 Java 泛型
5.7 泛型通配符和类型参数的范围
6、异常处理
6.1 异常处理基础
6.2 异常类型Java语言中常见的异常类型有哪些
6.3 未被捕获的异常
6.4 try和catch的使用
6.5 多重catch语句的使用
6.6 try语句的嵌套
6.7 throw:异常的抛出
6.8 throws子句
6.9 finally块
6.10 Java的内置异常
6.11 创建自己的异常子类
6.12 断言
7、线程编程
7.1 线程的概念
7.2 Java线程模型
7.3 主线程
7.4 创建线程
7.5 创建多线程
7.6 isAlive()和join()的使用
7.7 线程优先级
7.8 线程同步
7.9 线程间通信
7.10 线程死锁
7.11 线程的挂起、恢复和终止
8、输入输出(IO)操作
8.1 输入输出基本概念
8.2 面向字符的输入流
8.3 面向字符的输出流
8.4 面向字节的输入输出流
8.5 面向字节流的应用
8.6 文件与目录管理
8.7 文件的随机读写
8.8 文件的压缩处理
9、常用类库、向量与哈希
9.1 Java基础类库
9.2 Object类
9.3 Java语言包(java.lang)简介
9.4 日期和时间类
9.5 向量及其应用
9.6 哈希表及其应用
10、图形界面(GUI)设计
10.1 图形界面设计基础
10.2 框架窗口
10.3 标签、按钮和按钮事件
10.4 面板
10.5 布局设计
10.6 文本框和文本区
10.7 文本框和文本区的输入输出
10.8 选择框和单选按钮
10.9 列表和组合框
10.10 菜单
10.11 对话框
10.12 滚动条
10.13 鼠标事件
10.14 键盘事件
11、图形、图像与多媒体
11.1 绘图基础
11.2 设置字型和颜色
11.3 绘图模式
11.4 Graphics类的绘图方法
11.5 Graphics2D类的绘图方法
11.6 图像处理基础
11.7 图像缓冲技术
11.8 多媒体基础
12、网络与数据库编程
12.1 IP地址和InetAddress类
12.2 统一资源定位符
12.3 套接字(Socket)
12.4 数据库连接
12.5 几个重要的类和接口
12.6 数据库查询
12.7 数据库更新
12.8 插入记录
12.9 修改记录
12.10 删除记录