ByteBuffer Converting CharBuffer
****Java所有对象,只认识Unicode的数据 :
即1> Unicode 基本编码(2个字节表示一个符号)。
2>存储加工的1>>utf-8,
2>>utf-16 big endian (无bom ,有bom)
3>>utf-16 little endian (无bom ,有bom)
所以当我们给别人东西时编码:可以用Unicode 基本编码,或其它几种。
所以当别人给我们东西时我只接收:Unicode 基本编码,或其它几种,如果是其它编码格式,必须在接受输入时进行转换。
查询当前系统:UTF-8格式,如果一个文件有中文和Ascii码 UTF-8 无Bom 应该最省空间。
以前整个测试发现: 严1a
1、Unicode 保存6字节
2、UTF-16 little endian 无bom 保存6字节
3、 UTF-16 Big endian 无bom 保存12 字节
4、UTF-16 little endian 有bom 保存8字节
5、UTF-16 Big endian 有bom 保存14字节
6、UTF-8 (默认有Bom) EF BB BF E4 B8 A5 31 61 (8个字节)
7、UTF-8 无Bom E4 B8 A5 31 61 (5个字节)
如果让java对象做事,必须用它们所认识的语言。
目的:1》就是想打印到控制台看看,打印的对象只支持 String。
2》把byte 转换成 char,ByteBuffer 转换成 CharBuffer
一:简单描述
char: 16bits Unicode0 Unicode 2^16-1 Character
byte :8bits -128 +127 Byte
1、byte :只是一个由0,1构成的 8位数
1》比方 如果取出的是ASCII码 0--127 符号,哪么这8位表示一个完整的符号。
2》取出是中文,UTF-8 :有可能3个字节或2个字节表示一个字,
2、char:就是ASCII符号没问题,哪么中文
一个字符(一个字):由几个字节构成,所以一个字符要保存3个或2个字节,表示完整的一个字。
二、建立小程序
1、建立 data3.txt 文本文件,保存编码是Unicode(上面7种都可以).因为只认识Unicode(上面7种都可以)文件,
如果不是Unicode(上面7种都可以)格式时,必须以Unicode格式输入。
2、通过java的 FileInputStream 去取-----放入ByteBuffer中。
3、得到char (Unicode 编码,到底是那种UTF-8,或UTF-16)的编码。
System.getProperty("file.encoding");:得到char的编码 ==UTF-8
4、转换 Charset.forName(encoding).decode(buff)) 。
即几个字节合并成一个字节。
package io;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
import java.io.*;
public class BufferToText {
private static final int BSIZE = 1024;
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
FileChannel fc = new FileInputStream("data3.txt").getChannel();
ByteBuffer buff = ByteBuffer.allocate(BSIZE);
fc.read(buff);
buff.flip();
String encoding = System.getProperty("file.encoding");
//解码方式输出,表示从是UTF-8 文本文件取出来的数据,转换成char。
System.out.println("Decoded using " + encoding + ": "+ Charset.forName(encoding).decode(buff));
// Or, we could encode with something that will print:
}
}
ByteBuffer Converting CharBuffer相关推荐
- 学习笔记之ByteBuffer使用和实现以及文件内存映射
转载自 学习笔记之ByteBuffer使用和实现以及文件内存映射 ByteBuffer和CharBuffer等其它Buffer的直接子类一样,顾名思义,就是存取字节的Buffer.很多数据最终在和底 ...
- NIO-java.nio.ByteBuffer中flip、rewind、clear方法的区别
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...
- java nio rewind_NIO-java.nio.ByteBuffer中flip、rewind、clear方法的区别
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...
- ByteBuffer总结
文章目录 1.Buffer介绍 2.buffer运用 3.直接内存和堆内存写和读性能对比 1.Buffer介绍 Buffer 类是 java.nio 的构造基础.一个 Buffer 对象是固定数量的. ...
- JAVA基础 - BYTEBUFFER是什么?
Buffer 类是 java.nio 的构造基础.一个 Buffer 对象是固定数量的.数据的容器,其作用是一个存储器或者分段运输区.在这里,数据可被存储并在之后用于检索.缓冲区可以被写满或释放.对于 ...
- ByteBuffer 详解
文章目录 ByteBuffer 一个重要的类 ByteBuffer 类的重要组成: 初始化 常用方法说明 ByteBuffer 一个重要的类 在 java 的 NIO 当中,有一个很重要的类,就是 B ...
- 【NIO】学习系列(二)ByteBuffer类
文章目录 1.介绍 2.创建非直接缓冲区与直接缓冲区 3.直接缓冲区的垃圾释放 4.直接缓冲区与非直接缓冲区的运行效率比较 5.包装Wrap数据的处理 6.put(byte b)和get()方法的使用 ...
- java file.io的各种使用
File类 File可以表示一个文件的名字也可以表示某个目录下一堆文件的名字,如果是表示多个文件,那么可以使用list方法来获取他们的set集合,返回的是一系列的字符串.下面我们就来看下如何使用这个类 ...
- 还搞不懂 Java NIO?快来读读这篇文章!
来自:会点代码的大叔 首先,我们需要弄清楚几个概念:同步和异步,阻塞和非阻塞. 01 同步和异步 1. 同步 进程触发 IO 操作的时候,必须亲自处理: 比如你必须亲自去银行取钱. 2. 异步 进程触 ...
最新文章
- Replication--镜像+复制
- 读书笔记_代码大全2第十章_变量初始化
- android模拟器电量,Android 模拟器AVD,设置电池状态
- scheme解释器 C语言实现,使用Scala写了个简单的Scheme解释器
- normalize函数_提取棋盘格角点函数解析
- Arduino笔记-调节呼吸灯频率实验
- Fatal error: Maximum function nesting level of '100' reached, aborting!
- c语言解析字符串报文,传递字符串数组报文和解析
- 使用 Grafana+collectd+InfluxDB 打造现代监控系统
- flume-sink
- python3-day2(基本回顾)
- window10进入“服务”的三种方式
- 数值计算——追赶法求解三对角方程组(附代码)
- R语言实现随机森林代码
- 售前工作过程展示4“突发事件预警信息发布平台”
- 拆分句子成为一个个单词,并统计各个单词的数量
- 子组件改变父组件的两种方式
- 将 MATLAB 搬到虚拟机
- 灰色关联分析过程及代码实现
- 去年一个百万级的小软件项目经验分享,20来个功能模块,项目不太好做有些棘手