gpt4 book ai didi

深入解析Java编程中面向字节流的一些应用

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章深入解析Java编程中面向字节流的一些应用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

文件输入输出流 。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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){}
   }
}

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

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

深入解析Java编程中面向字节流的一些应用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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();
   }
}

过滤流 。

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

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

?
1
2
DataInputStream(InputStream in); //创建新输入流,从指定的输入流 in 读数据
DataOutputStream(OutputStream out); //创建新输出流,向指定的输出流 out 写数据

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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.

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);
     }
   }
}

运行结果:

?
1
三个数的和为:0

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

?
1
2
3
4
5
6
7
8
try {
   while ( true )
   sum+=a.readInt();
}
catch (EOFException e){
   System.out.pritnln( "三个数的和为:" +sum);
   a.close();
}

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
   }
}

运行结果:

?
1
2
请输入一个整数:26
842403082 的各位数字之和=31

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

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

System.in、System.out、System.err 这 3 个标准输入输流对象定义在 java.lang.System 包中,这 3 个对象在 Java 源程序编译时会被自动加载。 标准输入:标准输入 System.in 是 BufferedInputStream 类的对象,当程序需要从键盘上读入数据时,只需要调用 System.in 的 read()方法即可,该方法从键盘缓冲区读入一个字节的二进制数据,返回以此字节为低位字节,高位字节为 0 的整型数据。 标准输出:标准输出 System.out 是打印输出流 PrintStream 类的对象。PrintStream 类是过滤输出流类 FilterOutputStream 的一个子类,其中定义了向屏幕输出不同类型数据的方法print()和 println()。 标准错误输出:System.err 用于为用户显示错误信息,也是由 PrintStream 类派生出来的错误流。Err 流的作用是使 print()和 println()将信息输出到 err 流并显示在屏幕上,以方便用户使用和调试程序.

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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){}
   }
}

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

最后此篇关于深入解析Java编程中面向字节流的一些应用的文章就讲到这里了,如果你想了解更多关于深入解析Java编程中面向字节流的一些应用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com