`

编解码是否一一映射?

DOS 
阅读更多
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        DataOutputStream dos=new DataOutputStream(baos);
        dos.writeByte(2);
        dos.writeByte(3);
        dos.writeByte(0x83);
        
        String data=baos.toString();
        byte[] buf=baos.toByteArray();

        ByteArrayInputStream bais1=new ByteArrayInputStream(data.getBytes());
        DataInputStream dis1=new DataInputStream(bais1);
        System.out.println(dis1.readByte());
        System.out.println(dis1.readByte());
        System.out.println(dis1.readUnsignedByte());
        System.out.println("------------------------------------");
        ByteArrayInputStream bais2=new ByteArrayInputStream(buf);
        DataInputStream dis2=new DataInputStream(bais2);
        System.out.println(dis2.readByte());
        System.out.println(dis2.readByte());
        System.out.println(dis2.readUnsignedByte());

 

打印结果:
2
3
239
------------------------------------
2
3
131


问 题:

为什么这2个打印结果不一样呢?

 

回 答:

这个原因应该是某些码值在某些字符集下编解码过程非一一映射导致

某些默认系统编码比如GBK,在decoding时,即 baos.toString(),会出现malformed-input和unmappable-character sequences被系统默认串替代的情况;在encoding时,即data.getBytes(),也会出现在默认字符集中无法被编码的串,这时候结 果是未定的。

验证一下,替换 dos.writeByte(0x83) => dos.writeByte(0x7f) 结果则是一样的 都是127

由此可见。

 

分享到:
评论

相关推荐

    基于FPGA的8B/10B编解码设计

    与现有的8B/10B编解码方案相比,该方案是一种利用FPGA实现8B/10B编解码的模块方法,接收模块在收到外部发送的并行数据时,通过直接查找映射的方法转换成利于传输的串行信号。串行信号经串并行转换模块,将数据经10B/...

    ASN.1 UPER编解码工具 示例代码

    本主题主要关注使用UPER编解码工具的实践,这是一个用于处理ASN.1定义的数据结构,并将它们转换为二进制格式或从二进制格式反向转换的工具。该工具提供了底层实现,即处理编码和解码的核心算法,以及易于使用的接口...

    sbc编解码源代码

    **sbc编解码源代码**是用于处理音频编码和解码的一种技术,特别是在Android平台上。sbc(Subband Coding)是一种低比特率音频编码标准,广泛应用于蓝牙音频传输,如A2DP(Advanced Audio Distribution Profile)协议...

    PDU短信编解码demo,c语言

    在IT行业中,PDU(Protocol Data Unit)短信编解码是一种常见的通信技术,特别是在GSM(全球系统移动通信)网络中。PDU模式是短信服务中心(SMSC)与手机之间交换短信的一种方式,它使用二进制编码来传输数据。在...

    基于 android 的avc编解码源码

    本资源提供的是一套完整的AVC编解码源码,对于开发者来说,这是一个深入理解视频编解码原理、优化性能或定制功能的宝贵素材。下面将详细介绍AVC编解码的基本概念、工作流程,以及在Android环境下如何应用这些源码。 ...

    G711A音频编解码

    **G711A音频编解码技术详解** 在信息技术领域,音频编解码是通信系统中的关键环节,它负责将模拟音频信号转换为数字数据,以便于存储、传输和处理。G711A是一种广泛应用的音频编码标准,尤其在电话系统、VoIP...

    g711编解码

    G711是一种广泛应用于语音通信的标准音频编解码器,尤其在PSTN(公共交换电话网络)和VoIP(Voice over Internet Protocol)系统中非常常见。它定义了两个主要的编码格式:μ-law(也称为u-law或mu-law)和A-law,...

    PCM编解码simulink模块

    本篇将详细阐述PCM编解码在Simulink环境中的实现及其相关知识点。 一、PCM编码原理 PCM编码过程主要包括采样、量化和编码三个步骤: 1. **采样**:根据奈奎斯特定理,为了不失真地恢复原始模拟信号,采样频率至少...

    G722编解码源代码

    G722是一种广泛应用于语音通信的音频编解码标准,尤其在IP电话和网络音频传输中占有重要地位。这个压缩包包含的源代码文件,是实现G722编解码功能的关键部分,让我们来深入了解一下这些文件及其在G722编解码过程中的...

    G711 Alaw,Ulaw, G721, G723编解码

    在通信和音频处理领域,编解码技术是至关重要的,特别是在语音传输中。G711、G721和G723是三种广泛使用的音频编解码标准,它们各自有不同的特点和应用场景。让我们深入了解一下这些编码方式,并探讨它们在实际应用中...

    h264编解码

    H264编解码是数字视频处理领域中一种高效且广泛应用的编码标准,由ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(动态图像专家组)联合开发,作为MPEG-4 AVC(高级视频编码)的一部分。H264,也称为AVC(Advanced ...

    PCM编解码C++

    在通信传输中,尤其是语音传输领域,PCM 编解码扮演着至关重要的角色。它使得语音信号能够通过数字通信系统进行高效、高质量的传输。 PCM 编码的基本过程包括采样、量化和编码三个步骤: 1. **采样**:根据...

    JPEG编解码的c语言实现

    在C语言中实现JPEG编解码需要理解其核心算法,包括离散余弦变换(DCT)、量化、哈夫曼编码以及反量化和逆DCT等步骤。以下是对这些知识点的详细解释: 1. **JPEG编解码流程**: - **编码**:首先,图像被分割成8x8...

    C/C++ Base64编解码开源库

    在C/C++中,处理Base64编解码通常需要自定义函数或者利用开源库。这个开源库提供了解决这个问题的方法。 1. **Base64编码原理** - Base64编码是将每3个字节(24位)的数据转换为4个6位的字符(每个字符对应Base64...

    g711音频编解码(C/C++)实现

    C/C++实现G.711编解码主要涉及以下几个关键步骤: 1. **PCM采样**:音频信号首先通过ADC(Analog-to-Digital Converter)转换成数字信号,通常以8000Hz的采样率和8位的样本深度进行采样。这将得到一个16kHz的PCM...

    电子功用-数字电视编解码装置和数字电视编解码方法

    在电子技术领域,数字电视编解码装置与方法是至关重要的组成部分,它们是现代数字电视系统的核心技术。本文将深入探讨这一主题,旨在提供关于数字电视编解码的全面理解。 数字电视编解码装置主要负责将模拟电视信号...

    C BASE64 编解码函数

    根据提供的文件信息,我们可以总结出以下关于“C BASE64 编解码函数”的相关知识点: ### C BASE64 编解码函数简介 #### 1. 基本概念 BASE64是一种用于将二进制数据转换为文本字符串的标准编码方法。这种编码方式...

Global site tag (gtag.js) - Google Analytics