// 写
std::ofstream fout("a.txt");
int nNum = 20;
std::string str("hello");
fout << nNum << "," << std << std::endl;
fout.close()
// 读文本文件
std::ifstream fin("a.txt");
int nNum;
char szBuf[256] = {0};
fin >> nNum >> szBuf;
fin.close();
#include
// 写二进制
std::ofstream fout("data.dat", std::ios::binary);
int nNum = 20;
int a[5] = {1, 2, 3, 4, 5};
std::string str("hello, world");
fout.write((char*)&nNum, sizeof(int));
fout.write(reinterpret_cast<const char*>(a), sizeof(int)*5);
fout.write(str.c_str(), sizeof(char)*(str.size()));
fout.close();
// 读二进制文件
std::ifstream fin("data.dat", std::ios::binary);
int nNum;
int b[5];
char szBuf[256] = {0};
fin.read((char*)&nNum, sizeof(int));
fin.read(reinterpret_cast<char*>(b), sizeof(int)*5);
fin.read(szBuf, sizeof(char) * 256);
fin.close();
参考:C++读写二进制文件
// 获取文件的大小
ifstream fin;
fin.open("test.jpg", ios::binary | ios.ate);
long size = fin.tellg();
参考:[C++]读写二进制文件和文本文件
f = open('test.txt')
f.read()
f.close()
f.readline() # 整行读取数据,若没读取到数据则返回空
f.readlines() # 将文件内容以列表形式存放
f.next() # 和f.readline()相似,逐行读取数据,若没读取到数据则报错
# 写入txt, 文件如果存在会先清空再写入
f = open('test.txt', 'w', buffering=1) # 行缓冲,python3文本读写不能使用无缓冲,但二进制写可以使用buffering=0
f.write('hello')
f.close()
f.writelines(['\nhello dear!', '\nhello baby!']) # 多行写入
参考:Python读写txt文本文件
np.save
& np.load
将数组以未压缩的原始二进制格式保存在扩展名为 npy
的文件中np.save('name.npy', data)
data = np.load('name.npy')
tofile
& fromfile
读写二进制文件。文件后缀名没有要求,且读取数据需要指定 dtype
,需要与保存时的类型一致。data.tofile("data.bin")
data = np.fromfile("data.bin", dtype=np.float32)
参考:Numpy数组的保存与读取
public static void writeFile(String path, String fileName, byte[] content)
throws IOException {
try {
File f = new File(path);
if (!f.exists()) {
f.mkdirs();
}
FileOutputStream fos = new FileOutputStream(path + fileName);
fos.write(content);
fos.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
参考:
[1] JAVA文件工具类之——文件写入(byte数组、String方式、url写入方式)
FileInputStream img = new FileInputStream("img.png");
Bitmap bitmap = BitmapFactory.decodeStream(img);
int[] pixels = new int[width * height];
byte[] data = new byte[width * height * 3];
bitmap.getPixels(pixels, 0, stride, 0, 0, width, height); // 读取图像数据,放入int数组中,int数组中的每个int数据包含rgb三个分量
for (int i = 0; i < pixels.length; ++i) {
int pixel = pixels[i];
// data[i * 3] = pixel >> 16 & 0xff;
data [i * 3] = (byte)Color.red(pixel);
data [i * 3 + 1] = (byte)(pixel >> 8 & 0xff);
data [i * 3 + 2] = (byte)(pixel & 0xff);
}
// 读取png图像以rgba格式存储为byte数组
FileInputStream img = new FileInputStream("img.png");
Bitmap bitmap = BitmapFactory.decodeStream(img);
int pixel = bitmap.getPixel(0, 0);
int a = Color.alpha(pixel);
int r = Color.red(pixel);
int g = Color.green(pixel);
int b = Color.blue(pixel);
int bytes = bitmap.getByteCount(); // 获取bitmap数据大小,存储的是argb数据
ByteBuffer buffer = ByteBuffer.allocate(bytes);
bitmap.copyPixelsToBuffer(buffer); // 复制数据
buffer.position(0);
byte[] bb = new byte[buffer.remaining()];
buffer.get(bb); // bb中存储的是rgbargba...数据
// 一些Bitmap相关操作
int bytes = bitmap.getByteCount(); // Bitmap像素点的色彩通道排列顺序是RGBA
ByteBuffer buffer = ByteBuffer.allocate(bytes); // 使用allocate()静态方法创建字节缓冲区
bitmap.copyPixelsToBuffer(buffer); // 将位图的像素复制到指定的缓冲区
int w = bmp.getWidth();
int h = bmp.getHeight();
//byte 与 int 的相互转换
public static byte intToByte(int x) {
return (byte) x;
}
public static int byteToInt(byte b) {
//Java 总是把 byte 当做有符处理;我们可以通过将其和 0xFF 进行二进制与得到它的无符值
return b & 0xFF;
}
参考:
[1] RGB和Bitmap互相转换
[2] android利用BitMap获得图片的像素数据
[3] 【Android】二进制图片和Bitmap的getPixel方法解析
[4] Java 中 byte、byte 数组和 int、long 之间的转换