ForzaMilanGong 2009-04-14 17:07
浏览 294
已采纳

Java如何设置字节序?

Java Socket编程
因为另一方是Little—Endian的,而Java是Big-Endian
因此要进行转换
有办法能直接在IO流上进行设定,自动完成转换么?
输入由Little—Endian转换成Big—Endian,输出由Big—Endian转换为Little—Endian
[b]问题补充:[/b]
回1楼
Character只能包装字符,无法对字符串或者流进行操作

  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2009-04-16 10:15
    关注

    用这个包可以解决,中转编码为unicode

    软件包 java.nio.charset 的描述

    定义用来在字节和 Unicode 字符之间转换的 charset、解码器和编码器。

    类名
    描述

    Charset 字符和字节之间的命名映射关系

    CharsetDecoder 把字节解码为字符
    CharsetEncoder 把字符编码为字节
    CoderResult 描述 coder 的结果
    CodingErrorAction 描述检测到编码错误时所采取的操作

    charset 是 16 位 Unicode 字符序列和字节序列之间的命名映射关系,从某种意义上来说,在 RFC 2278 中对其进行了定义。解码器 是把一个特定 charset 中的字节转换成字符的引擎,编码器 是把字符转换成字节的引擎。编码器和解码器在字节和字符缓冲区上操作。它们共同被称为 coder。

    Charset 类定义了为给定的 charset 创建 coder 的方法和检索与某个 charset 相关的名称的方法。它还定义了用于测试是否支持特定 charset 的静态方法、通过名称查找 charset 实例的静态方法,以及构造一个包含目前 Java 虚拟机支持的每个 charset 的映射静态方法。

    大多数用户不直接使用这些类;他们使用 String 类中存在的和 charset 有关的构造方法和方法,一起使用的还有 InputStreamReader 和 OutputStreamWriter 类,为了利用此包中定义的 charset 设施,所有这些类的实现都被重写。为了在构造这些类的实例时显式地指定 charset 对象,已经对 InputStreamReader 和 OutputStreamWriter 类做了一些更改。

    通过在 java.nio.charset.spi 包中的 CharsetProvider 类中定义的接口,可提供对新 charset 的支持。

    标准 charset
    Java 平台的每一种实现都需要支持以下标准 charset。请参考该实现的版本文档,查看是否支持其他 charset。这些可选 charset 的行为在不同的实现之间可能有所不同。

    Charset
    描述

    US-ASCII 7 位 ASCII 字符,也叫作 ISO646-US、Unicode 字符集的基本拉丁块
    ISO-8859-1 ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1
    UTF-8 8 位 UCS 转换格式
    UTF-16BE 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序
    UTF-16LE 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序
    UTF-16 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识

    UTF-8 charset 在 RFC 2279 中指定;它所基于的转换格式在 ISO 10646-1 的 Amendment 2 中指定,并在 Unicode Standard 中也有所描述。

    UTF-16 charset 在 RFC 2781 中指定;它们基于的转换格式在 ISO10646-1 的 Amendment 1 中指定,并在 Unicode Standard 中也有所描述。

    UTF-16 charset 使用 16 位量,因此对字节顺序敏感。在这些编码中,流的字节顺序可以由 Unicode 字符 'FF' 所表示的初始字节顺序标记 来指示。按以下方式处理字节顺序标记:

    进行解码时,UTF-16BE 和 UTF-16LE charset 忽略字节顺序标记;进行编码时,不写入字节顺序标记。

    进行解码时,UTF-16 charset 解释字节顺序标记,以指示流的字节顺序,但是如果没有字节顺序标记,则默认使用 Big Endian;进行编码时,使用 Big Endian 字节顺序并写入 Big Endian 字节顺序标记。

    在任何情况中,在解码操作的开始读取字节顺序标记时,将在结果字符序列中忽略该标记。字节顺序标记出现在输入序列的第一个元素之后时,由于使用相同的代码表示零宽度不间断空格,所以不忽略该标记。
    Java 虚拟机的每个实例都有默认的 charset,它可能是也可能不是某个标准 charset。默认 charset 在虚拟机启动时决定,通常根据语言环境和基础操作系统使用的 charset 来确定。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 matlab求解平差
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办