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

文件输入输出流

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

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

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){}

}

}

10a0035dd1d4e1d7359e7ce5bafcf78d.png

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

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

9da1f0114b9c9b6a307c68cf6a748902.png

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。其构造方法为:

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

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

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

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

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

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 型数字,求和并显示。

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。

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

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 源程序编译时会被自动加载。

标准输入:标准输入 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 所属的类。

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

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

System.out.println();

for(int i=0;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){}

}

}

运行结果如所示:

ad4aba8493c9942e5544c0957c43b384.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cdatabase读取excel第一行数据_pandas读取excel数据并对重复数据进行标记或者删除

pandas读取excel数据并对重复数据进行标记或者删除​mp.weixin.qq.compandas通常在读取excel数据之后,如果需要进行去重,有两种方式,一种是进行标记,另一种是在pandas中直接去重如下图所示,excel数据:&…

java 7.函数-递归_带有谓词的Java中的函数样式-第2部分

java 7.函数-递归在本文的第一部分中,我们介绍了谓词,这些谓词通过具有返回true或false的单一方法的简单接口,为Java等面向对象的语言带来了函数式编程的某些好处。 在第二部分和最后一部分中,我们将介绍一些更高级的概念&#xf…

apk改之理_一份礼物.apk-O泡果奶的逆向分析

事情起因是震惊全国大学生的1013事件!!!刚好看到社团群里在讨论这个,于是就发挥专业特长分析一下拿到apk ,第一步肯定先放到虚拟机里跑一下看下效果emmm这似曾相识的页面,这熟悉的音量,唯一变化的就是音乐变成了O泡果奶的魔性洗脑…

python彩色螺旋线_解决python彩色螺旋线绘制引发的问题

彩色螺旋线的绘制代码如下: import turtle import time turtle.pensize(2) turtle.bgcolor(black) colors [red, yellow, purple, blue] turtle.tracer(False) for x in range(400): turtle.forward(2*x) turtle.color(colors[x % 4]) turtle.left(91) turtle.trac…

ID3和C4.5分类决策树算法 - 数据挖掘算法(7)

(2017-05-18 银河统计)决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干&#xff0c…

mysql 聚簇索引和非聚簇索引_图文并茂,说说MySQL索引

点击上方 小伟后端笔记 ,选择 星标 公众号重磅资讯、干货,第一时间送达作者:小小木的博客来源:cnblogs.com/wyc1994666/p/10831039.html序开门见山,直接上图,下面的思维导图即是现在要讲的内容,…

mysql数据库日志截断,MySQL基础(十一):查询截取分析

下面是小凰凰的简介,看下吧!💗人生态度:珍惜时间,渴望学习,热爱音乐,把握命运,享受生活💗学习技能:网络 -> 云计算运维 -> python全栈( 当前正在学习中…

component是什么接口_阿里高级技术专家:整洁的应用架构“长”什么样?

很多同学不止一次和我反馈,我们的系统很混乱,主要表现在:应用的层次结构混乱:不知道应用应该如何分层、应该包含哪些组件、组件之间的关系是什么;缺少规范的指导和约束:新加一段业务逻辑不知道放在什么地方…

20155202 实验四 Android开发基础

20155202 实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android、组件、布局管理器的使用; 3.掌握Android中事件处理机制。 实验要求 第24章:初识Android任务一:完成Hello World…

python的代码在哪写_python代码在哪里编写

编写python代码,可以在自带的ide中写,也可以使用第三方编辑器,下面介绍几款常见的python IDE 1. VimVim 可以说是 Python 最好的 IDE。Vim 是高级文本编辑器,旨在提供实际的 Unix 编辑器‘Vi’功能,支持更多更完善的特…

如果您在2015年编写过Java代码-这是您不容错过的趋势

去年我们有机会遇到的最有趣趋势的实用概述 在这篇文章中,我们将回顾构成我们2015年对话的5个主题和新发展。与其他许多年终总结保持较高水平的不同,我们将做一个更实际的操作不用流行语 。 好吧,没有太多*流行语。 与往常一样,对…

mel滤波器组频率响应曲线_了解二阶滤波器的奈奎斯特图

在之前的文章中,我介绍了奈奎斯特图,然后我们通过检查奈奎斯特曲线和截止频率与一阶无源滤波器之间的关系,更详细地探索了这些类型的图。在本文中,我们将查看二阶滤波器的奈奎斯特图。二阶过滤器当我说“二阶”滤波器时&#xff0…

python爬取知乎标题_python爬虫 爬取知乎文章标题及评论

目的:学习笔记2.首先我们试着爬取下来一篇文章的评论,通过搜索发现在 response里面我们并没有匹配到评论,说明评论是动态加载的。3.此时我们清空请求,收起评论,再次打开评论 4.完成上面操作后,我们选择XHR&…

知道接口地址 如何传数据_如何选显示器连接线?四种主流接口要知道

前两天家里电脑显示器的线坏了,火急火燎的买了根线,谁知道买回来之后接口不匹配,不能用。显示器为什么要有这么多接口呢?这些接口又有什么区别呢?必须把它搞清楚!这不,经过我的不屑努力&#xf…

docker rabbitmq php扩展,Docker开启RabbitMQ延时消息队列

前言经常在开发中会遇到一些不需要同步执行的业务,那我们就需要用到消息队列来进行异步执行,但是对于某些业务就还需要用到延时的功能,比如订单支付超时关闭,那么这个时候我们就需要开启消息队列的延时功能,当然也有朋…

[转]Eclipse插件开发之基础篇(3) 插件的测试与调试

原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 Eclipse中已经嵌入了JUnit,我们可以使用JUnit为插件进行单体测试。一般的JUnit是不可以对插件部分(对Eclipse的API依赖的部分)进行测…

大整数乘法c语言代码_大整数乘法

大整数乘法和我们小学学过的乘法公式一样&#xff08;如下图&#xff09;&#xff0c;就是按位相乘&#xff0c;两个数中的每一位彼此相乘&#xff0c;然后将相同列的结果加起来&#xff0c;最后统一处理进位即可。#include <iostream> #include <cstring> using n…

primefaces_懒惰的JSF Primefaces数据表分页–第2部分

primefaces页面代码非常简单&#xff0c;没有复杂性。 检查“ index.xhtml”代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"…

龙芯2h芯片不能进入pmon_“龙芯”18年:这个团队,终结了中国计算机产业的“无芯”历史...

近期在第二届数字中国建设峰会上展出的国产芯片龙芯3号。芯片是信息产业的灵魂&#xff0c;通用CPU(中央处理器)可以说是芯片中的“珠峰”。自主研发CPU&#xff0c;难度很大。在这个故事的起点&#xff0c;2001年8月的一个清晨&#xff0c;当龙芯第一代产品龙芯1号成功启动操作…

帝国cms录入表单模板php,帝国cms7.5在线表单提交制作教程

最近春哥仿站团队接到很多仿站客户订单&#xff0c;这里面有一个这样的功能&#xff0c;表单提交。今天花时间写个教程给大家。另外我们春哥仿站团队推出低价仿站业务&#xff0c;市面上99%的企业站点都能制作出来&#xff0c;有需要的联系我们。今天春哥团队华哥给大家讲解一下…