字节与字符的换算

字节与字符换算_moon-CSDN博客_字节和字符的关系换算

1、计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个“0”或一个“1”叫一位。

2、计算机存储容量基本单位是字节(Byte),音译为拜特,8个二进制位组成1个字节,一个标准英文字母占一个字节位置,一个标准汉字占二个字节位置。

3、计算机存储容量大小以字节数来度量,1024进位制:

1024B=1K(千)B

1024KB=1M(兆)B

1024MB=1G(吉)B

1024GB=1T(太)B

以下还有PB、EB、ZB、YB 、NB、DB,一般人不常使用了。

4、字符是一种符号,同以上说的存储单位不是一回事。

1字节 = 8位

1字符 = 3字节 (UTF-8)

扫一扫,分享内容

打赏作者

ywcmoon

你的鼓励将是我创作的最大动力

您的余额不足,请更换扫码支付或

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。

2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

百度知道 - 信息提示

 | 

 | 

京ICP证030173号-1   京网文【2013】0934-983号     ©2022Baidu  

 | 

 

java中字符和字节的转换_Java最佳实践–字符到字节和字节到字符的转换_最佳 Java 编程-CSDN博客

java中字符和字节的转换

在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论

性能调优。 特别是,我们将着重于使用默认编码时如何有效地处理字符到字节和字节到字符的转换。 本文总结了两种建议的自定义方法与两种经典方法(“

”和

)的性能比较,该方法将字符转换为字节,反之亦然。

所有讨论的主题均基于用例,这些用例源于电信行业关键任务超高性能生产系统的开发。

在阅读本文的每个部分之前,强烈建议您参考相关的Java API文档以获取详细信息和代码示例。

所有测试均针对具有以下特征的Sony Vaio进行:

应用以下测试配置:

字符到字节和字节到字符的转换被认为是Java开发人员的常见任务,这些Java开发人员正在针对网络环境进行编程,操纵字节数据流,序列化

对象,实现通信协议等。因此,Java提供了一些实用程序来启用开发人员将

(或字符数组)转换为等效的字节数组,反之亦然。

类的“

”操作可能是将

转换为其等效的字节数组的最常用方法。 由于可以根据所使用的编码方案来不同地表示每个字符,因此,上述操作需要“

”以正确转换

字符也就不足为奇了。 如果未提供“

”,则该操作使用平台的默认字符集将

编码为字节序列。

将字符数组转换为其等效字节数组的另一种“经典”方法是使用NIO包的

类。 稍后将提供特定方法的示例代码片段。

与更细粒度的方法相比,上述两种方法虽然非常流行并且毫无争议地易于使用和直接使用,但它们的性能都大大不足。 请记住,

。 为了在字符编码之间进行转换,您应该坚持使用“

”或

框架方法和实用程序的“经典”方法。

当所有要转换的字符均为ASCII字符时,建议的转换方法如下所示:

通过将每个字符值转换为等效的字节来构造结果字节数组,因为我们知道所有字符都在ASCII范围内(0 – 127),因此只能占据一个

字节大小。

使用结果字节数组,我们可以通过使用“经典”

构造函数“

”转换回原始

对于默认的字符编码,我们可以使用下面显示的方法将

转换为字节数组,反之亦然:

Java中的每种字符类型都占用2个字节的大小。 为了将

转换为其等效的字节数组,我们将

每个字符转换为其2字节的表示形式。

使用结果字节数组,可以使用以下提供的方法将其转换回原始的

我们从其2字节表示形式构造每个

字符。 使用结果字符数组,我们可以通过使用“经典”

构造函数“

”将其转换回原始

最后但并非最不重要的一点是,我们提供了两个使用NIO包的示例方法,以便将

转换为其等效的字节数组,反之亦然:

对于本文的最后一部分,我们提供了上述

到字节数组和字节数组到

转换方法的性能比较表。 我们已经使用输入字符串“

”测试了所有方法。

首先将

转换为字节数组的性能比较表:

横轴表示测试运行的次数,纵轴表示每次测试运行的每秒平均事务数(TPS)。 因此,较高的值更好。 正如预期的那样,与“

”和“

”建议的方法相比,“

”和“

”方法的执行效果均较差。 如您所见,与“经典”方法相比,我们提出的方法可将TPS提高近30%。

最后将字节数组转换为

性能对比图:

横轴表示测试运行的次数,纵轴表示每次测试运行的每秒平均事务数(TPS)。 因此,较高的值更好。 正如预期的那样,无论是“

的方法较差相比

建议的方法进行。 如您所见,与“

”方法相比,我们提出的方法使TPS增长了近15%,与“

”方法相比,TPS增长了近30%。

总之,当您处理字符到字节或字节到字符的转换时,如果您不打算更改所使用的编码,则可以通过使用自定义(细粒度)方法而不是使用提供的“经典”方法来获得卓越的性能。

类和

包。 当将测试

转换为等效的字节数组时,与“经典”方法相比,我们提出的方法总体上提高了45%的性能。

快乐编码

贾斯汀

聚苯乙烯

考虑到我们的一些读者提出的使用“

”操作而不是使用“

”来将

字符转换为字节的提议后,我更改了我们提出的方法,并重新执行测试。 如预期的那样,进一步实现了性能提升。 特别地,在TPS

13%的平均增加被记录为

方法和TPS的

2%平均增加被记录为

因此,您应该使用更改后的方法,因为它们的性能甚至比原始方法还要好。 更新的方法如下所示:

翻译自:

java中字符和字节的转换

扫一扫,分享内容

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。

2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

字节与字符的区别 | 菜鸟教程

字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。

字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。

一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。

字符与字节有什么区别呢? - 云+社区 - 腾讯云

分享文章到朋友圈

海报分享

1、

,二进制的一个“0”或一个“1”叫一位。 2、

,8个二进制位组成1个字节。一般而言:一个标准英文字母占一个字节位置,一个标准汉字占二个字节位置。 3、

  1024B=1K(千)B   1024KB=1M(兆)B   1024MB=1G(吉)B   1024GB=1T(太)B   以下还有PB、EB、ZB、YB 、NB、DB,一般人不常使用了。 4、

,同以上说的存储单位不是一回事。

=============================================================================

1个字节等于8个bit位,每个bit位又0/1两种状态,也就是说一个字节可以表示256个状态,计算机里用字节来作为最基本的存储单位。 一般来说,英文状态下一个字母或数字(称之为字符)占用一个字节,一个汉字用两个字节表示。在不同的编码方式下一个字符占的字节不太一样。 按照ANSI编码标准,标点符号、数字、大小写字母都占一个字节,汉字占2个字节。按照UNICODE标准所有字符都占2个字节。

=============================================================================

字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。

字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。

它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。

一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。 一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

一个英文字符等于两个字节,一个中文(含繁体)等于两个字节。       符号:英文标点占一个字节;中文标点占两个字节。       举例:英文句号“.”占1个字节的大小;中文句号“。”占2个字节的大小。

一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

世界上任何字符的存储都需要4个字节。

本文参与

,欢迎正在阅读的你也加入,一起分享。

字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而...

java当中有两种流,一种是字节流(byte stream): 以1字节(8-bit)为单位进行读/写,一次处理一个字节。另一种是字符流(character s...

Java采用unicode来表示字符,java中的一个char是2个字节,一个中文或英文字符的unicode编码都占2个字节,但如果采用其他编码方式,一个字符占...

       看了一下<>中有关字符与字符串的区别的讲解,解决我这方面的疑问,看来对C语言的基础特性了解得还是太浅显了。

1.原子性,简单说就是相关操作不会中途被其他线程干扰,一般通过同步机制实现。 2.可见性,是一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,通常被解...

我们都知道,区块链技术具有去中心化、稳定、安全等特点,我们一直探讨的问题是区块链技术的运用领域和运用手段,在银链原子链开发的项目中,区块链技术得到良好的施展平台...

企业即时通讯(EIM)一般是由企业根据自身需求,将服务器部署在企业内部或者企业租用的互联网机房内,公司内部的员工通过登录到这个邮件服务器建立起点到点的连接,进行...

既然点进来了,相信你或多或少都听说过这两个名词了,因此,在为你解答之前,让我们先从一个例子出发。假如你想开发一个 OCR 应用(通俗的说就是文字识别应用),他的...

在internet共享上网技术上,一般有两种方式,一种是proxy代理型,一种是NAT网关型,关于两网络

如果要检查 JavaScript 中的相等性,有两个比较运算符:双等号运算符(==)和三等号运算符(===)。

在C语言中,“字符”与“字符串”之间,是有区别的。这一篇文章中,我们将介绍一下,在C语言中的“字符”与“字符串”,它们之间的区别。

前段时间网上流传着一段视频,这个视频在网上引起了很大的争议,视频中某HR说:大公司筛选简历的时候只认985学校毕业的,非985高校毕业的求职者,连简历筛选这一关...

SFTP是一种安全的文件传输协议,一种通过网络传输文件的安全方法;它确保使用私有和安全的数据流来安全地传输数据。

1 GB2312-80 GB 2312 或 GB 2312-80 是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称 GB 0,...

作者:废物大师兄 来源:www.cnblogs.com/cjsblog/p/14346766.html

验证数据集(Validation Datasets)是训练模型时所保留的数据样本,我们在调整模型超参数时,需要根据它来对模型的能力进行评估。

在云计算、物联网、人工智能和虚拟现实技术的快速发展下,全球迎来了数字化时代。那么,企业的信息化、数字化及智能化到底有什么区别呢?

1.#{}占位符可以用来设置参数,如果传进来的是基本类型,也就是(string,long,double,int,boolean,float等),那么#{}里面的...

在JavaScript中,使用 + 和 += 这两个运算符对字符串进行连接运算,前者用于连接两个字符串,后者则连接两个字符串,并将结果赋给第一个字符串。

Copyright © 2013 - 2022 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

扫码关注云+社区

领取腾讯云代金券

Java中的字节和字符 - sxzheng - 博客园

最近在看Java中的IO相关知识,发现对字节和字符的理解还不够。写篇总结记录一下。

所谓字节(Byte),是计算机数据存储的一种计量单位。一个二进制位称为比特(bit),8个比特组成一个字节,也就是说一个字节可以用于区分256个整数(0~255)。由此我们可以知道,字节本是面向计算机数据存储及传输的基本单位,后续的字符也就是以字节为单位存储的,不同编码的字符占用的字节数不同。

那么在Java中,除了存储的意义外,Java还将字节Byte作为一种基本数据类型,该数据类型在内存中占用一个字节,用于(-128~127)范围内的整数

总的来说,字节在Java中有两种含义:

计算机底层存储的是字节,字符的设计则是用于展示符号。屏幕上显示的各种文字,数字,符号等就是解码的字符。所以我们说字符是用来显示的符号,它将存储的字节转换成人们看得懂的符号,因此字符的核心就是定义字节与展示符号之间的关系,这种映射关系通常也叫做编码。

为什么要编码呢?前面我们知道数据都是以字节为单位存储在计算机中,字节可以区分256个整数,最容易想到的就是将这256个整数定义为256种状态并分别对应256个字符。但是人类符号太多了,256种是不够的。所以人们想到将多个字节合并起来表示人类语言符号,编码的问题就转化成了字节的组合问题。

如今有很多编码格式,常见的如ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16等等。

ASCII编码是最基础的编码格式,标准的ASCII码一共有128个,占用字节的低7位,将英语系语种的符号都能覆盖住,但是总的来说能表示的字符还是非常有限。

ISO-8859-1编码是ASCII编码的一种扩展,它用了字节的8位,能表示256种字符,且向下兼容ASCII,包含了绝大多数的西欧符号。

GB2312是双字节编码,意味着它使用两个字节来表示符号,包含有6763个汉字。

GBK是GB2312的一个扩展,也是双字节编码,能够表示21003个汉字,且向下兼容GB2312。

...

编码的规范越来越多,不同语言的国家都定义了自己的语言符号编码标准,一时间编码标准百花齐放,在互联网的时代里交流十分不便,不同编码体系之间的信息交流都需要采用不同的解码方案,不然就会出现乱码的现象。于是国际标准化组织ISO制定了一个能够容纳世界上所有文字和符号的字符编码方案Unicode。Unicode是一个字符集,它规定了人类所有字符对应的二进制数,至于这个二进制数怎么存储则是由开发者来进行实现。其中比较流行的实现是UTF-8和UTF-16,还有一种UTF-32。

UTF-32编码使用4个字节,也就是32位二进制存储Unicode字符,效率高但是空间浪费。

UTF-8编码是一种变长的编码方式,它使用1~6个字节来存储,对于英语系的字符使用一个字节,向下兼容ASCII,对于汉字则使用两个字节,依次类推,这样就能够节省一定的空间。

UTF-16编码是介于两者之间的一种编码方式。对于部分字符采用2个字节,另一部分字符采用4个字节。因此UTF-16无法兼容ASCII。

在平时的使用中,UTF-8的使用还是比较多,就是由于它既能向下兼容ASCII,还能够在一定程度上节省空间。

Java中是如何进行编码和解码的呢?我们知道,编码/解码的过程主要是发生在字符与字节之间转换的过程。在展示字符的时候,我们将内存中的字节解码成符号,在存储或者传输文件时,我们将字符编码位字节数据。

解码的过程是将字节转换为字符,也就是我们在读取文件或者网络数据的过程。

在java中,我们通过FileReader读取文件数据,FileReader继承自InputStreamReader。在InputStreamReader中使用了解码器StreamDecoder。

 通过上述InputStreamReader源码我们可以知道:

另外,上述列举只是源码的一部分,我们设置编码方案有很多种形式,如在构造方法种传入编码方式的String类型名称、传入CharSet类型的字符集以及上述的CharsetDecoder类型的字符解码方式。如果不传入编码方案,则默认为当前环境的编码方案。

与解码类似,在存储文件或者写入数据的时候,我们将字符转换为字节,写入文件或者网络。

在java种,我们通过FileWriter来写入文件,FileWriter继承自OutputStreamWriter。在OutputStreamWriter种使用了编码器StreamEncoder。

 通过源码我们可以知道:

JAVA字节流与字符流的相互转换-阿里云开发者社区

先来看一下流的概念:

     在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。

     程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。

     在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)

     java中提供了专用于输入输出功能的包Java.io,其中包括:

     InputStream,OutputStream,Reader,Writer

     InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象,

     Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串.

     字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点

     所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列

      字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以

     字节流是最基本的,所有的InputStrem和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的 但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联 在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的 。

     字节流和字符流的操作过程:   

     以文件操作为例,主要的操作流程如下:

    1 使用File类打开一个文件

    2 通过字节流或字符流的子类,指定输出的位置

    3 进行读/写操作

    4 关闭输入/输出

     IO操作属于资源操作,一定要记得关闭 

     

     字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream、InputStream     

     字节输出流:OutputStream

  OutputStream是整个IO包中字节输出流的最大父类,此类的定义如下:

  从以上的定义可以发现,此类是一个抽象类,如果想要使用此类的话,则首先必须通过子类实例化对象,那么如果现在要操作的是一个文件,则可以使用:FileOutputStream类。通过向上转型之后,可以为OutputStream实例化

  Closeable表示可以关闭的操作,因为程序运行到最后肯定要关闭

  Flushable:表示刷新,清空内存中的数据

  FileOutputStream类的构造方法如下:

 

写数据:

以上输出只会进行覆盖,如果要追加的话,请看FileOutputStream类的另一个构造方法:

在构造方法中,如果将append的值设置为true,则表示在文件的末尾追加内容。

  字节输入流:InputStream

  既然程序可以向文件中写入内容,则就可以通过InputStream从文件中把内容读取进来,首先来看InputStream类的定义:

      public abstract class InputStream extends Object implements Closeable

  与OutputStream类一样,InputStream本身也是一个抽象类,必须依靠其子类,如果现在是从文件中读取,就用FileInputStream来实现。

  观察FileInputStream类的构造方法:

      public FileInputStream(File file)throws FileNotFoundException

  读文件:

换种方式,一个字节一个字节读入

但以上情况只适合知道输入文件的大小,不知道的话用如下方法:

  

  在程序中一个字符等于两个字节,那么java提供了Reader、Writer两个专门操作字符流的类。

字符输出流:Writer

  Writer本身是一个字符流的输出类,此类的定义如下:

     public abstract class Writer extends Object implements Appendable,Closeable,Flushable

  此类本身也是一个抽象类,如果要使用此类,则肯定要使用其子类,此时如果是向文件中写入内容,所以应该使用FileWriter的子类。

  FileWriter类的构造方法定义如下:

     public FileWriter(File file)throws IOException

  字符流的操作比字节流操作好在一点,就是可以直接输出字符串了,不用再像之前那样进行转换操作了。

  写文件:

  字符输入流:Reader

  Reader是使用字符的方式从文件中取出数据,Reader类的定义如下:

    public abstract class Reader extends Objects implements Readable,Closeable

  Reader本身也是抽象类,如果现在要从文件中读取内容,则可以直接使用FileReader子类。

  FileReader的构造方法定义如下:

    public FileReader(File file)throws FileNotFoundException

  以字符数组的形式读取出数据:

  字节流和字符流使用是非常相似的,那么除了操作代码的不同之外,还有哪些不同呢?

  字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的

  字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

  那开发中究竟用字节流好还是用字符流好呢?

  在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。

  如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。

     虽然Java支持字节流和字符流,但有时需要在字节流和字符流两者之间转换。InputStreamReader和OutputStreamWriter,这两个为类是字节流和字符流之间相互转换的类。

  InputSreamReader用于将一个字节流中的字节解码成字符:

  有两个构造方法:

    InputStreamReader(InputStream in);

    功能:用默认字符集创建一个InputStreamReader对象

    InputStreamReader(InputStream in,String CharsetName);

    功能:接收已指定字符集名的字符串,并用该字符创建对象

  OutputStream用于将写入的字符编码成字节后写入一个字节流。

  同样有两个构造方法:

    OutputStreamWriter(OutputStream out);

    功能:用默认字符集创建一个OutputStreamWriter对象;

    OutputStreamWriter(OutputStream out,String  CharSetName);

    功能:接收已指定字符集名的字符串,并用该字符集创建OutputStreamWrite对象

      为了避免频繁的转换字节流和字符流,对以上两个类进行了封装。

  BufferedWriter类封装了OutputStreamWriter类;

  BufferedReader类封装了InputStreamReader类;

  封装格式:

  BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out));

  BufferedReader in= new BufferedReader(new InputStreamReader(System.in);

  利用下面的语句,可以从控制台读取一行字符串:

  BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

  String line=in.readLine();

本文由星云财经网发布,不代表星云财经网立场,版权归原作者所有,若侵犯了您的权利请与我们联系。