字节流和比特流之间的差异

时间:2016-02-25 12:55:18

标签: streaming byte bits bytestream

到目前为止,我认为它们与由字节组成的字节相同,并且双方需要知道另一侧的字节大小和字节序并相应地转换流。然而,维基百科说byte stream!= bit streamhttps://en.wikipedia.org/wiki/Byte_stream)和bit streams专门用于视频编码(https://en.wikipedia.org/wiki/Bitstream_format)。在此RFC https://tools.ietf.org/html/rfc107中,他们讨论了这两件事并描述了Two separate kinds of inefficiency arose from bit streams.。我的问题是:

  • 字节流和比特流之间的真正的区别是什么?
  • 如果比特流与字节流不同,它是如何工作的?接收方如何知道在给定时间要处理多少位?
  • 为什么比特流在某些情况下比字节流好?

4 个答案:

答案 0 :(得分:11)

这是一个非常广泛的问题,我必须给出10000英尺的视野。比特流在两种不同的用法中很常见:

  • 非常低级,这是许多硬件运行的基本方式。最好的例子是从硬盘或光盘发出的数据流或通过传输线发送的数据,如USB电缆或您收到此帖子的同轴电缆或电话线。您找到的RFC适用于此处。

  • 高级别,它们在数据压缩中很常见,每个令牌的可变位数允许打包数据更紧密。 Huffman coding是最基本的压缩方式。您找到的视频编码主题适用于此处。

  

字节流和比特流之间的真正区别是什么?

字节流与面向字节的设备以及您在编程中几乎总会遇到的设备高度兼容。比特流更低级别,只有系统集成工程师才会担心它们。虽然比特流的有效载荷通常是计算机感兴趣的字节,但通常需要更多的开销来确保接收器能够正确地解释数据。通常比编码数据中的字节所需的位数多得多。需要额外的位来确保接收器正确同步并且可以检测并且可能纠正位错误。 NRZ encoding很常见。

RFC非常考古,在1971年他们仍然在敲打让计算机互相交流的基础知识。那时他们仍然接近传输线行为,比特流,并且许多计算机还没有就一个字节中的8位达成一致。他们担心在非常贫乏的硬件上将位转换为本地字节的成本以及需要将尽可能多的位打包到消息中。

  

接收方如何知道在给定时间要处理多少位?

协议确定,就像RFC那样。在可变长度比特编码的情况下,确定它的是比特值本身,就像霍夫曼编码一样。

  

为什么比特流在某些情况下比字节流好?

我认为已经涵盖了,因为它更符合其目的。要么是因为硬件是面向比特的,要么是因为可变比特长度编码是有用的。

答案 1 :(得分:5)

BYTE Stream

字节流是用于表示允许沿特定路径发送数据的计算技术的术语。这里,代替被称为二进制数字或位的各个1和0,沿着该路径发送大小为8位的单元,称为字节。它有时也被称为字符流,因为构成自然语言字母,数字等的大多数字符由这样的8位单元表示。数据传输中涉及的路径或实体有点抽象,因为它们可能表示程序正在访问的文件,程序中正在处理的数据或通过网络传输的数据。

对于最有效的字节流,它流经专用且可靠的路径,有时称为管道或管道。这样的路径必须可靠,以确保输出准确。在一个方面,当考虑计算机编程时,管道是连接程序的各个方面的路径,以便当从输入处理数据时,它可以被传递到程序的另一部分,传递到另一部分,等等,直到达到输出。

某些操作系统可以使用另一种类型的管道来获取数据,例如内容和文件,并通过多个不同的程序运行它以产生一些输出。这对于文本处理应用程序很有用,通过字符字节流使数据传递有效。因此,字节流的最常见用途之一是用于计算机操作系统访问文件中的数据时。

在早期的计算机网络中,一些系统区分了一个字节和什么也称为八位字节。由于八位字节也是由八位组成的计算单元,因此这些术语有时可互换使用,但在那些较旧的系统上,它们并不相同。结果,八位字节流是在谈到字节流时也使用的术语,但主要是关于计算机网络。一个这样的例子," application / octet-stream,"是多用途Internet邮件扩展(MIME)类型,用于通过网络提供任何类型的二进制数据。

当涉及通过计算机网络发送字节流时,需要可靠的双向传输层协议,例如因特网上使用的传输控制协议(TCP)。这些被称为字节流协议。与某些类型的硬件组件一起使用的其他串行数据协议,例如通用异步接收器/发送器(UART)技术,是也使用字节流进行通信的串行数据通道。在这种情况下,字节或字符被打包在发送端的帧中,其中附加了一个额外的起始位和一些可选的检查位,然后在接收端从帧中分离出来。这种技术有时被称为面向字节的协议。

Java中的字节流

正如我们所知,stream帮助我们顺序访问文件或数据。字节流“逐字节”访问文件,适用于任何类型的数据,但在某些情况下,不建议使用字节流。例如,如果文件使用unicode编码并且文件中的字符用两个字节表示,则字节流将单独处理这些字符,我们将需要进行自我转换。

'Byte Streams'是否支持Unicode字符?

是的,字节流支持字节,因此支持任何可以使用bytes..i.e表示的内容。文字,照片,视频..等等。这里需要考虑的是,使用字节流进行操作的所有内容都需要遵循一些编码和解码规则,以及0和1的组合。

BIT Stream

定义:比特流是指从一个设备传输到另一个设备的二进制信息位(1' s和0')。

然而,在家庭影院应用中,比特流是指来自源组件(例如DVD,蓝光或HD-DVD播放器,HD-Cable,数字编码的杜比数字或DTS相关的压缩音频信号)。或者HD-Satellite Box)到前置放大器/处理器(独立或内置在家庭影院接收器中),用于解码和分配到放大器级,以模拟形式,通过扬声器进行最终声音再现。

比特流可以通过数字光纤,数字同轴或HDMI接口发送。

也称为:比特流,数字比特流,音频比特流

示例:DVD或蓝光光盘播放器" X"包含Dolby Digital或DTS音轨,它被编码为光盘上的数字位。 DVD播放器必须读取此编码,通过数字光纤,数字同轴或HDMI连接将编码信号以比特流形式传输到家庭影院接收器" Y"具有杜比数字或DTS解码器。 反过来,接收器将数字编码的杜比数字或DTS比特流转换为模拟形式的正确信道分配,然后放大,以便听众通过扬声器听到它。

答案 2 :(得分:1)

计算机代码中的一个 1或0 ,也称为二进制数字。 比特流的最常见用途是使用传输控制协议或TCP。这一系列指南告诉计算机如何在彼此之间发送和接收消息。万维网和电子邮件服务等依靠TCP指南以有序的方式发送信息。通过比特流发送确保这些部分以正确的顺序到达并且在传递期间消息不会被破坏,这可能使其不可读。因此比特流一个接一个地发送。

  

8位组成一个字节,字节流将这些8位数据包从计算机传输到计算机。

数据包在到达时被解码,因此计算机可以解释它们。因此字节流是按顺序一起作为一组一起发送的比特的特殊情况。对于最有效的字节流,它流经专用的可靠的路径有时称为管道或管道。 当通过计算机网络发送字节流时,需要可靠的双向传输层协议,例如因特网上使用的传输控制协议(TCP)。这些被称为字节流协议。与某些类型的硬件组件一起使用的其他串行数据协议,例如通用异步接收器/发送器(UART)技术,是也使用字节流进行通信的串行数据通道。在这种情况下,字节或字符被打包在发送端的帧中,其中附加了一个额外的起始位和一些可选的检查位,然后在接收端从帧中分离出来。这种技术有时被称为面向字节的协议。

  

以一般生活为例,假设你有很多匹配棒发送。然后你可以一个接一个地发送一根棍子,一个在一个   时间..或者你可以把它们中的一些包装在一个火柴盒中并发送它们   在一起,一个火柴盒依次在另一个火柴盒之后。第一个就像   比特流和后者像字节流一样。

因此,这一切都取决于硬件想要或最适合的东西。如果你的手很小并且你不能接受火柴盒,但你仍然想要火柴棍,那么你一次拿一个火柴盒或者拿下盒子。也是字节从某种意义上来说,流不是更好,每个位都不需要检查,数据可以分批发送,如果任何一个都失败,那么整个8位都可以重新发送。

答案 3 :(得分:0)

在这里添加其他好的答案:

字节流是比特流的类型。字节流位描述为有意义的"包"这是8位宽。

某些(特别是低级)流可能与每个8位序列中的含义无关。调用这些"字节流"

将是一个糟糕的描述

类似于每辆本田思域的车型,但并不是每辆车都是本田思域......