java 3number_java 数据Number、Math

一个初出茅庐的小子与大家共享一些关于Number和Math的使用,因水平有限,难免有写的不完善的地方,嘻嘻。看完之后,希望可以留下你珍贵的指导意见。

The Numbers Classes

在写代码的时候,也许会使用到java各种的基本数据类型,如下:

int i = 500;

float gpa = 3.65f;

byte mask = 0xff;

然而,在面向对象开发的过程,我们更倡导你使用对象来代替各种的基本数据类型,而java也为各种基本数据类型提供了wrapper class(包装类)——这些wrapper class封装了对应的基本数据。通常,编译器会为我们完成这种封装——换句话说就是,如果一个方法需要Object类型的参数,而实际提供的值确实2、3等数值,这时编译器会把2、3等数值封装成对应的wrapper class;类似,如果一个方法需要基本数据类型的参数,而实际提供的却似Object类型,这时编译器会Object类型的参数拆成几本数据类型——而这就所为的“自动拆装箱原理”。

接着给出一个自动拆装箱的demo:Integer x, y;

x = 12;

y = 15;

System.out.println(x+y);以上为x、y变量赋int 值,编译器会自动将x、y封装成Integer对象类型;在println()里,为了进行基本的算术处理,编译器会自动将x、y变量拆成int的基本数据类型。所有基本数据的wrapper class都是抽象类Number的子类

712ed71dd3bad8eb754b0e20b54bf37f.png附:在这里,有四个Number的子类并没有讨论。BigDecimal 和 BigInteger 是用于高精度的运算;AtomicInteger 和 AtomicLong 用于多线程程序里。下面给出使用wrapper class 而不使用基本数据类型的理由:1、可用在需要Object类型参数的方法里(常用于操作集合的数据)2、在类里可使用各种常量(如MIN_VALUE和MAX_VALUE),可以提供各种数据的上下界限(范围)。3、可以使用wrapper class的对象方法,进行各种值与基本数据类型的相互转换,如String类型的相互转换,还可以与各种进制的数据进行相互装换(二进制binary、八进制octal、十进制decimal、十六进制hexadecimal)下表列出了各个wrapper class都具有的方法(Number 类的方法)Methods  Implemented by all Subclasses of Number

方法描述

byte byteValue()

short shortValue()

int intValue()

long longValue()

float floatValue()

double doubleValue()将Number对象转换成对应的基本数据类型

int compareTo(Byte anotherByte)

int compareTo(Double anotherDouble)

int compareTo(Float anotherFloat)

int compareTo(Integer anotherInteger)

int compareTo(Long anotherLong)

int compareTo(Short anotherShort)将Number对象的值与参数anotherXxx的值进行比较

boolean equals(Object obj)判断Number对象和参数Object是否相同。

当两个对象不为空且数据类型和值都一致的情况下,才返回true。

如果判断的是Double和Float类型,则还需要一些额外的参数,详情可参考java API的官方文档。

对于与String类型的数据与及各种进制数据之间的装换,每个Number类(在这指其子类)都有着相对应的方法。下表列出了Integer对象与String数据和进制之间相互转换的方法。其他的Number类都与之类似。Integer类的转换方法

方法描述

static Integer decode(String s)将String解码为Integer。String数据可以是十进制、八进制或者十六进制。

static int parseInt(String s)返回一个int值,String只能是十进制的数据。

static int parseInt(String s, int radix)将指定进制的String数据转换成int值。参数radix指多少进制(可以是2、8、10或者16)

String toString()将Integer数据转成String类型

static String toString(int i)返回一个指定整数的String对象

static Integer valueOf(int i)返回一个表示指定的int值的Integer实例。

static Integer valueOf(String s)返回String数据的Integer对象

static Integer valueOf(String s, int radix)将指定进制的String数据转换为Integer类型。如当s=”333”,radix=8时,会返回数据为219的Integer实例。

格式化输出各种数据

一直以来,也许你都是在使用标准输出(System.out)输出各种数据,之所以可以这样做,是因为所有Number数据都可以转换成String类型。然而,有时候你可能需要更好地控制数据的输出,则需要使用java提供的其他方法。

printf()和format()方法在java.io包里,有一个PrintStream类,此类提供了两个方法(printf()和format())来取代print()和println()。printf和format方法除了名字不一样之外,其余用法一致。同时因为System.out本事是一个PrintStream对象,所以你可以在原来使用print()和println()的位置用printf()或者format()方法来代替——System.out.format(.....);

其方法原型如下:public PrintStream format(String format, Object... args);public PrintStream printf(String format, Object... args);参数format指定输出的格式(字符窜的格式),而args则是输出格式里的数据(参数列表)。为了说明它的用法,可以看一下这个简单的例子:

System.out.format("The value of "+ "the float variable is " + "%f, while the value of the "

+ "integer variable is %d, " + "and the string is %s", floatVar, intVar, stringVar);

格式说明由“%+转换符”组成,转换符是一个指定输出数据类型的字符。同时,你可以在“%”和转换符之间有选择地添加其他标记。想了解更多关于转换符标记的信息,可以参阅java.util.Formatter。下面给出一个基本用法的例子:int i = 461012;

System.out.format("The value of i is: %d%n", i);

“%d”代表了十进制数据(在这里值i),“%n”代表了输出换行,所以其输出如下:The value of i is: 461012为了适应各地语言的使用习惯,java重载了printf和format方法,如下:public PrintStream format(Locale l, String format, Object... args)如在法国,输出的带有小数的数据时,是用“,”划分整数和小数的,如下面的代码:float floatVar = 123.37f;

int intVar = 123;

StringstringVar = "123";

System.out.format(Locale.FRANCE, "The value of the float " + "variable is %f, while the "

+ "value of the integer variable " + "is %d, and the string is %s%n", floatVar, intVar, stringVar);

其输出如下:

The value of the float variable is 123,370003, while the value of the integer variable is 123, and the string is123

Demo:格式化输出

在这个Demo里,使用到各种常用的转化符和flags,具体解释如下表:(更多格式可参阅java.util.Formatter)Converters and Flags Used indemo.java

转换符Flag说明

d十进制数据

f浮点数据

n换行符。注意是用“%n”,而不是“\n”.

tB,tb‘t’指日期/时间的转换(下同),’B’指月份全称(如January),’b’指月份的简称(如Jan)

ty, tY格式年份,‘y’指格式化时带前导零的两位数,即00 – 99;’Y’指格式化时带前导零的四位数(至少),如0096或者2013。

tm格式月份,’m’指格式时带前导零的两位数,即01 ~ 13.

td, te‘t’指日期/时间的转换,’d’指一个月中的天数,在格式化时带前导零的两位数,即01 – 31;‘e’指格式化为两位数,即1 – 31。

tl,tk格式小时数,’l’指12小时制(1 ~ 12),’k’指24小时制(0 ~ 23)。

tM格式分钟数,’M’指格式化时带前导零的两位数,即00 ~ 59。

tS格式化秒,格式化时带前导零的两位数,即00 - 60("60"是支持闰秒所需的一个特殊值)。

tp特定于语言环境的上午或下午,标记以小写形式表示,例如"am"或"pm"。

tDA date & time conversion—date as %tm%td%ty

088个字符宽度,宽度不足在头部以“0”填充

+包含符号位(正数+或负数—)

,组分隔符

-左对齐(默认是右对齐)

.3保留3位小数

10.3表示10个字符宽度,保留三位小数(默认右对齐)

import java.util.Calendar;

import java.util.Locale;

public class IntegerText {

public static void main(String[] args) {

long n = 461012;

System.out.format("%d%n", n); // --> "461012"

System.out.format("%08d%n", n); // --> "00461012"

System.out.format("%+8d%n", n); // --> " +461012"

System.out.format("%,8d%n", n); // --> " 461,012"

System.out.format("%+,8d%n%n", n); // --> "+461,012"

double pi = Math.PI;

System.out.format("%f%n", pi); // --> "3.141593"

System.out.format("%.3f%n", pi); // --> "3.142"

System.out.format("%10.3f%n", pi); // --> " 3.142"

System.out.format("%-10.3f%n", pi); // --> "3.142"

System.out.format(Locale.FRANCE, "%-10.4f%n%n", pi); // --> "3,1416"

Calendar c = Calendar.getInstance();

System.out.format("%tB %te, %tY%n", c, c, c); // --> "May 29, 2006"

System.out.format("%tl:%tM %tp%n", c, c, c); // --> "2:34 am"

System.out.format("%tD%n", c); // --> "05/29/06"

}

}

TheDecimalFormat Class

可以使用java.text.DecimalFormat格式化十进制数字的输出,包括前/后导零、前后缀、组分隔符、小数点。尽管使用DecimalFormat可以灵活控制输出的格式,另一面它也增加了代码的复杂度。如下:通过模式patten构造DecimalFormat的对象myFormatter,接着调用format()方法(从NumberFormat继承过来的),格式化输出字符串。

import java.text.*;

public class DecimalFormatDemo {

static public void customFormat(String pattern, double value) {

DecimalFormat myFormatter = new DecimalFormat(pattern);

String output = myFormatter.format(value);

System.out.println(value + " " + pattern + " " + output);

}

static public void main(String[] args) {

customFormat("###,###.###", 123456.789); //-->123456.789 ###,###.### 123,456.789

customFormat("###.##", 123456.789); //-->123456.789 ###.## 123456.79

customFormat("00.000", 123.7876); //-->123.7876 00.000 123.788

customFormat("$###,###.###", 12345.67); //-->12345.67 $###,###.### $12,345

}

}DecimalFormat.java输出说明

数值Pattern输出说明

123456.789###,###.###123,456.789‘#’代表了一个阿拉伯数字,‘,’为组分隔符,‘.’用于分割整数和小数

123456.789###.##123456.79数值有三位小数,而模式里只用两个,会通过四舍五入保留两位小数

123.78000000.000000123.780‘0’代表了一个阿拉伯数字,位数不足需要在前或后一零补充,注意其与‘#’的区别。

12345.67$###,###.###$12,345.67以美元符号‘$’开头,保留三位小数,且组分割为3

tips:组分隔符“,”通常用于千位,但是在某些国家/地区中回用于分隔万位(如中国)。分组大小是分组字符之间的固定数字位数,例如100,000,000 是 3,而 1,0000,0000 则是 4。如果使用具有多个分组字符的模式,则最后一个分隔符和整数结尾之间的间隔才是使用的分组大小。所以 "#,##,###,####" == "######,####" =="##,####,####"。 即“123456.789”的模式为“###,#,##.###”,其输出为“12,34,56.789”。

基本算数运算之外

java除了支持各种基本的算术运算(+, -, *, /, 和 %)之外,也为各种复杂的数学运算提供了工具类Math。通过Math类可以完成指数、对数、反三角函数等复杂的运算。

由于Math类的方法都是静态的,你可以在类里直接调用Math类的方法,如下:

Math.cos(angle);tips:可以使用static import静态导入Math类,如此便不用在每个方法下上Math;import static java.lang.Math.*;接着就可以直接在方法体里通过Math类的方法名调用Math类对应的方法:cos(angle);

常量与基本算术方法

在Math类里包含两个常量:Math.E,自然底数e

Math.PI,圆周率

Math类包含了超过40个的静态方法,为了分类来谈,先列出Math里的基本算术方法:Math的基本算术方法

方法描述double abs(double d)

float abs(float f)

int abs(int i)

long abs(long lng)返回参数的绝对值

double ceil(double d)取得大于或等于参数的最小整数,并以double类型返回

double floor(double d)取得小于或等于参数的最大整数,并以double类型返回

double rint(double d)取得最接近参数的某一整数(类似于四舍五入),并以double类型返回

long round(double d)

int round(float f)返回最接近参数的long/int值。

double min(double arg1, double arg2)

float min(float arg1, float arg2)

int min(int arg1, int arg2)

long min(long arg1, long arg2)返回两个数中较小的那一个

double max(double arg1, double arg2)

float max(float arg1, float arg2)

int max(int arg1, int arg2)

long max(long arg1, long arg2)返回两个数中较大的那一个

BasicMathDemo演示了如何去使用Math的基本算术方法:public class BasicMathDemo {

public static void main(String[] args) {

double a = -191.635;

double b = 43.74;

int c = 16, d = 45;

System.out.printf("The absolute value " +

"of %.3f is %.3f%n",

a, Math.abs(a)); //-->The absolute value of -191.635 is 191.635

System.out.printf("The ceiling of " +

"%.2f is %.0f%n",

b, Math.ceil(b)); //-->The ceiling of 43.74 is 44

System.out.printf("The floor of " +

"%.2f is %.0f%n",

b, Math.floor(b)); //-->The floor of 43.74 is 43

System.out.printf("The rint of %.2f " +

"is %.0f%n",

b, Math.rint(b)); //-->The rint of 43.74 is 44

System.out.printf("The max of %d and " +

"%d is %d%n",

c, d, Math.max(c, d));//-->The max of 16 and 45 is 45

System.out.printf("The min of of %d " +

"and %d is %d%n",

c, d, Math.min(c, d));//-->The min of of 16 and 45 is 16

}

}

Math里指数与对数运算:

下表列出了在Math里关于指数与对数运算的方法:指数、对数运算的方法

方法描述

double exp(double d)返回自然底数e的d次方幂的值

double log(double d)返回d值的自然对数(底数是e)。类似的有log10(double a)

double pow(double base, double exponent)返回base的exponent次方的值

double sqrt(double d)返回d的算术平方根Demo:ExponentialDemopublic class ExponentialDemo {

public static void main(String[] args) {

double x = 11.635;

double y = 2.76;

System.out.printf("The value of " +

"e is %.4f%n",

Math.E); //-->The value of e is 2.7183

System.out.printf("exp(%.3f) " +

"is %.3f%n",

x, Math.exp(x));//-->exp(11.635) is 112983.831

System.out.printf("log(%.3f) is " +

"%.3f%n",

x, Math.log(x));//-->log(11.635) is 2.454

System.out.printf("pow(%.3f, %.3f) " +

"is %.3f%n",

x, y, Math.pow(x, y));//-->pow(11.635, 2.760) is 874.008

System.out.printf("sqrt(%.3f) is " +

"%.3f%n",

x, Math.sqrt(x));//-->sqrt(11.635) is 3.411

}

}

Math里三角函数运算

下表列出了Math里关于三角函数的方法,需要注意的是,这些方法的参数都是以弧度制来表示的——换句话说就是,你需要将角度转换为弧度。可以使用方法toRadians(),将角度转换为弧度。三角函数运算的方法

方法描述

double sin(double d)返回角的三角正弦值

double cos(double d)返回角的三角余弦值

double tan(double d)返回角的三角正切值

double asin(double d)返回一个值的反正弦值;返回的角度范围在-pi/2到pi/2之间。

double acos(double d)返回一个值的反余弦值;返回的角度范围在0.0到pi之间。

double atan(double d)返回一个值的反正切值;返回的角度范围在-pi/2到pi/2之间。

double atan2(double y, double x)将矩形坐标(x,y)转换成极坐标(r, theta),返回所得角theta值。

double toDegrees(double d)

double toRadians(double d)角度和与弧度的相互转换方法

Demo:TrigonometricDemo,计算45度角的三角函数值:public class TrigonometricDemo {

public static void main(String[] args) {

double degrees = 45.0;

double radians = Math.toRadians(degrees);

System.out.format("The value of pi " +

"is %.4f%n",Math.PI);

//-->The value of pi is 3.1416

System.out.format("The sine of %.1f " +

"degrees is %.4f%n",

degrees,Math.sin(radians));

//-->The sine of 45.0 degrees is 0.7071

System.out.format("The cosine of %.1f " +

"degrees is %.4f%n",

degrees, Math.cos(radians));

//-->The cosine of 45.0 degrees is 0.7071

System.out.format("The tangent of %.1f " +

"degrees is %.4f%n",

degrees, Math.tan(radians));

//-->The tangent of 45.0 degrees is 1.0000

System.out.format("The arcsine of %.4f " +

"is %.4f degrees %n",

Math.sin(radians), Math.toDegrees(Math.asin(Math.sin(radians))));

//-->The arcsine of 0.7071 is 45.0000 degrees

System.out.format("The arccosine of %.4f " +

"is %.4f degrees %n",

Math.cos(radians), Math.toDegrees(Math.acos(Math.cos(radians))));

//-->The arccosine of 0.7071 is 45.0000 degrees

System.out.format("The arctangent of %.4f " +

"is %.4f degrees %n",

Math.tan(radians), Math.toDegrees(Math.atan(Math.tan(radians))));

//-->The arctangent of 1.0000 is 45.0000 degrees

}

}

随机数

Math类的random()方法可以产生大于等于0.0且小于1.0的(伪)随机数(0 <=Math.random()<1),如此,你便能利用这个函数产生各中范围的随机数,如

要产生0~9的随机数:int number = (int)(Math.random() * 10); //(0 <= number < 10)

如产生5~9的随机数:int number = (int)(Math.random() * 5) + 5;

附:使用Math.random()可以产生一个随机数。如果需要产生一系列随机数,可以创建java.util.Random的对象,并调用对应的方法。

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

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

相关文章

HOG(方向梯度直方图)

结合这周看的论文,我对这周研究的Histogram of oriented gradients(HOG)谈谈自己的理解&#xff1a; HOG descriptors 是应用在计算机视觉和图像处理领域&#xff0c;用于目标检測的特征描写叙述器。这项技术是用来计算局部图像梯度的方向信息的统计值。这样的方法跟边缘方向直…

保留数据给硬盘增加分区

我的块硬盘只有一个分区&#xff0c;里面还有数据&#xff0c;但是想再划分一个区&#xff0c;在win10系统下是这样操作的 首先&#xff0c;我的硬盘的文件系统是fat32&#xff0c;先通过命令提示符把文件系统转换成NTFS&#xff0c;转换前“压缩卷”是灰色的 convert c: /fs:n…

c# 简单序列化

序列化&#xff1a;是将对象状态转换为可保持或传输的格式的过程&#xff0c;原因有两个&#xff0c;第一是想永久的保存这些数据&#xff0c;以便将来可以重建这些数据。第二是想把数据从一个应用程序域发送到另外一个应用程序域中去。反序列化&#xff1a;就是把存储介质中的…

windows mobile开发循序渐进(6)windows mobile device center 使用问题

由于个人中邪&#xff0c;在经历一次windows 7安装失败之后&#xff0c;贼心不死&#xff0c;于昨天又重新安装了windows 7&#xff0c;终于成功。 回到windows mobile的开发上来呢&#xff0c;首先是配置环境&#xff0c;按照之前的经验&#xff0c;比较顺利的安装了virtual p…

mysql 代理 a_Keepalived+Mysql+Haproxy

#dd dd0 配主从vi /etc/my.cnf[mysqld]server-id 1log-bin mysql-binbinlog-ignore-db mysql,information_schemabinlog_format mixedauto-increment-increment 2auto-increment-offset 1#ddgrant replication slave on *.* to dd192.168.55.% identified by 123456show …

你真的了解Ioc与AOP 吗?(2)

三、基于配置文件和Reflection的工厂模式 为了消除MainApp对其它组件的依赖性&#xff0c;我们引入工厂模式&#xff0c;并且根据配置文件指定的装配规程&#xff0c;利用.net提供的反射技术完成对象的组装工作。本部分代码仅仅提供一种功能演示&#xff0c;如果实际应用仍需进…

关于一道数据库例题的解析。为什么σ age22 (πS_ID,SCORE (SC) ) 选项是错的?

本人大二学子。近段时间在做数据库复习题的时候遇到一道题&#xff0c;如下。 有关系SC&#xff08;S_ID&#xff0c;C_ID&#xff0c;AGE&#xff0c;SCORE&#xff09;&#xff0c;查找年龄大于22岁的学生的学号和分数&#xff0c;正确的关系代数表达式是&#xff08; &#…

java获取表主外键_通过 jdbc 分析数据库中的表结构和主键外键

文章转自&#xff1a;http://ivan4126.blog.163.com/blog/static/20949109220137753214811/在某项目中用到了 hibernate &#xff0c;大家都知道 hibernate 是 ORM 框架&#xff0c;他是有能力根据实体生成数据库表的。我们在单元测试的时候用到了 dbUnit &#xff0c;dbUnit 可…

c#扩展方法奇思妙用高级篇四:对扩展进行分组管理

从系列文章开篇到现在&#xff0c;已经实现的很多扩展了&#xff0c;但过多的扩展会给我们带来很多麻烦&#xff0c;试看下图&#xff1a; 面对这么多“泛滥”的扩展&#xff0c;很多人都会感到很别扭&#xff0c;的确有种“喧宾夺主”的感觉&#xff0c;想从中找出真正想用的方…

Robot Framework-Ride界面介绍及库的添加

Ride界面介绍1. Ride简介1.1什么是RideRide是robotframework的UI界面, 以HTML格式提供易于阅读的结果报告和日志, 用户可以自定义基于Python的测试库, 提供支持selenium的Web测试,语法和python很像。1.2 Ride界面介绍1.2.1主界面介绍&#xff1a; 1.2.2运行按钮和工程目录&a…

Android项目实战(三):实现第一次进入软件的引导页

最近做的APP接近尾声了&#xff0c;就是些优化工作了&#xff0c; 我们都知道现在的APP都会有引导页&#xff0c;就是安装之后第一次打开才显示的引导页面&#xff08;介绍这个软件的几张可以切换的图&#xff09; 自己做了一下&#xff0c;结合之前学过的 慕课网_ViewPager切换…

LESS CSS 框架简介(转)

为什么80%的码农都做不了架构师&#xff1f;>>> 原文地址:http://www.ibm.com/developerworks/cn/web/1207_zhaoch_lesscss/ 简介 CSS&#xff08;层叠样式表&#xff09;是一门历史悠久的标记性语言&#xff0c;同 HTML 一道&#xff0c;被广泛应用于万维网&#…

IP通信基础 实验三

PC端配置&#xff1a;配置ip地址 配置网关 交换机(左)配置&#xff1a;①创建VLAN system-view vlan 10 vlan 20 ②配置PC端接口 interface gi 1/0/1 port link-type access port access vlan 10 interface gi 1/0/2 port link-type access port access vlan 10 interface gi 1…

图像处理(三)

VC实现对不同信号波形相似程度的判别摘要&#xff1a;本文介绍了利用相关对信号波形进行相似程度的判别方法。通过该技术可以对采集到的多种类型的数据信号间的相似度进行判别。本算法由Microsoft Visual C 6.0实现。 一、 引言 在工程上我们经常要判断某设备产生的实际波形信号…

Servlet3.0学习总结(四)——使用注解标注监听器(Listener)

Servlet3.0提供WebListener注解将一个实现了特定监听器接口的类定义为监听器&#xff0c;这样我们在web应用中使用监听器时&#xff0c;也不再需要在web.xml文件中配置监听器的相关描述信息了。 下面我们来创建一个监听器&#xff0c;体验一下使用WebListener注解标注监听器&am…

PHP ThinkPHP学习第一步(搭建及认识ThinkPHP入口文件)

ThinkPHP包下载网址&#xff1a;http://www.thinkphp.cn本人下载3.2版本中的完整版&#xff0c;解压如下取其中的ThinkPHP文件于开发网站的根目录&#xff0c;并建立入口文件index.php入口文件index.php详细内容如下&#xff1a;<?php/** 本文件为thinkPHP的入口文件&#…

iptables 基础

SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如上图所示&#xff0c;如果内网主机访问外网而经过路由时&#xff0c;源 IP 会发生改变&#xff0c;这种变更行为就是 SNAT&#xff1b;反之&#xff0c;当外网的数据经过路由发往内网主机时&#xff0c;数据包…

Oracle11g远程连接配置 visual studio 2003

服务器端 配置&#xff1a;oracle11g R2 x64 1.设置监听 a.启动栏 -> 开始 -> 程序 -> Oracle-OraDb11g_home1 -> 配置和移植工具 -> Net Manager b.Oracle Net 配置 -> 本地 -> 监听程序 -> LISTENER &#xff0c;查看是否有本地地址在监听&#xff…

JAVA思维导图学习笔记_8张思维导图,55天学习笔记,帮你入门JavaSE

学完了Java中的基础语法&#xff0c;也就是JavaSE。对其做了一个详细的梳理&#xff0c;也便于以后回顾。其中有些知识点被自己遗漏了&#xff0c;比如正则表达式这些&#xff0c;只能以后找机会补上了。01前言对于计算机基础知识的了解、以及Java相关的软件安装。相关笔记02基…

使用MemoryStream和FileStream

使用MemoryStream和FileStream编程访问文件是通过文件流对象进行的&#xff0c;当应用程序需要访问文件时&#xff0c;必须先创建一个文件流对象&#xff0c;此流对象和文件是一一对应关系。在.NET中&#xff0c;使用抽象基类System.IO.Stream代表流&#xff0c;它提供Read和Wr…