写了个按照bit读取或写入java的IO流的简单代码,保留在博客里备忘。
/**
* 按bit读取的input。
* */
public class BitInput {
private InputStream input;
private int value;
private int next = 7;
public BitInput(InputStream input) {
this.input = input;
}
/**
* 读取一个bit,1,0,-1(文件结束)。
* */
public int readBit() throws Exception {
if (next == 7) {
value = input.read();
if (value == -1) {
return -1;
}
}
int result = (value & (1 << next)) >>> next;
next--;
if (next == -1) {
next = 7;
}
return result;
}
/**
* 读取size个bit。
* */
public int[] readBits(int size) throws Exception {
int[] result = new int[size];
for (int i = 0; i < size; i++) {
int v = readBit();
if (v == -1) {
throw new RuntimeException();
}
result[i] = v;
}
return result;
}
}
/**
* 按bit写出的output。
* */
public class BitOutput {
private OutputStream out;
private int value;
private int next = 7;
public BitOutput(OutputStream out) {
this.out = out;
}
public void writeBitOne() throws Exception {
write(1);
}
public void writeBitZero() throws Exception {
write(0);
}
private void write(int bit) throws Exception {
value = value | (bit << next);
next--;
if (next < 0) {
out.write(value);
value = 0;
next = 7;
}
}
public void writeBits(String bits) throws Exception {
for (int i = 0; i < bits.length(); i++) {
char v = bits.charAt(i);
if (v == '0' || v == '1') {
write(v - '0');
continue;
}
throw new RuntimeException();
}
}
public void writeBits(int[] bits) throws Exception {
for (int bit : bits) {
if (bit == 0 || bit == 1) {
write(bit);
continue;
}
throw new RuntimeException();
}
}
public void close() throws Exception {
if (next == 7) {
return;
}
out.write(value);
}
}
分享到:
相关推荐
Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据...
用于读取/写入非八位字节对齐值的库,例如1-bit boolean或17-bit unsigned int 。 请参阅 Java8+ 风味版本。 规格 布尔值 类型 尺寸(最小) 尺寸(最大) 笔记 boolean 1 1 readBoolean() , writeBoolean(boolean) ...
基于GD32F450I-EVAL开发板的SD卡测试程序,修改移植的emmc测试软件,主要是为了验证可行性和读写速率差别,完整代码,下载即可直接编译运行,若需修改为其他平台,仅修改时钟、IO等配置即可。 完成: 1、emmc卡的...
日志I / O-用于访问测井文件的库日志I / O是用于读取和写入良好日志文件的库。 从Q1 / 2021开始,Log I / O支持DLIS,LIS,LAS 2.0,LAS 3.0,BIT,XTF,ASC,SPWLA,CSV,XML(WITSML)和JSON Well Log格式。 日志I...
#FujiNet 基于ESP32硬件的... FujiNet当前提供以下设备: D:用于磁盘仿真,允许通过本地网络或Internet在SD卡或TNFS服务器上读取或写入磁盘映像。 P:用于打印仿真,为各种类型的流行打印机提供打印机仿真,包括Atari
只能用2根线读取和写入数字值(对于ESP-01来说是完美的)。 教程: 去下载。 单击右上角的“下载”按钮,重命名未压缩的文件夹PCF8575。 检查PCF8575文件夹是否包含PCF8575\\.cpp和PCF8575.h 。 将DHT库文件夹放置...
hdparm命令用于检测,显示与设定IDE或SCSI硬盘的参数。 语法格式:hdparm [参数] 常用参数: -a 设定读取文件时,预先存入块区的分区数 ...IO_support = 0 (default 16-bit) readonly = 0 (off) readahe
在固件库中操作 IDR 寄存器读取 IO 端口数据是通过 GPIO_ReadInputDataBit 函数实现的: uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 比如我要读 GPIOA.5 的电平状态,那么方法是: ...
void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数) { unsigned char i; ACC = d; for(i=8; i>0; i--) { DS1302_IO = ACC0; //相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ...
oracle会避开sql语句处理引擎,直接从数据库文件中读取数据,然后写入导出文件. 可以在导出日志中观察到: exp-00067: table xxx will be exported in conventional path 如果没有使用直接路径,必须保证buffer参数的值...
12864 C程序设计 #include __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define rs RA5 //命令/数据选择 #define rw RA4 //读/写选择 ... bit busy; ...