二进制写
#include <fstream>
class FileBinaryWriter
{
public:
FileBinaryWriter() {};
FileBinaryWriter(std::string fileName)
{
writer.open(fileName.c_str(), std::ios::binary);
}
~FileBinaryWriter()
{
if (writer.is_open())
{
writer.close();
}
}
void open(std::string fileName)
{
writer.open(fileName.c_str(), std::ios::binary);
}
bool isOpen()
{
return writer.is_open();
}
void writeBaseType(const void* data, size_t size)
{
writer.write((const char*)data, size);
}
void writeString(std::string data)
{
writer.write(data.c_str(), data.size() + 1);
}
void close()
{
writer.close();
}
private:
std::ofstream writer;
};
二进制读
#include <fstream>
class FileBinaryReader
{
public:
FileBinaryReader() {};
FileBinaryReader(std::string fileName)
{
reader.open(fileName.c_str(), std::ios::binary);
}
~FileBinaryReader()
{
if (reader.is_open())
{
reader.close();
}
}
void open(std::string fileName)
{
reader.open(fileName.c_str(), std::ios::binary);
}
bool isOpen()
{
return reader.is_open();
}
void close()
{
reader.close();
}
int nextInt()
{
int data;
reader.read((char*)(&data), sizeof(int));
return data;
}
std::string nextString()
{
std::string s;
char c;
do
{
c = nextChar();
if (c == '\0')
{
break;
}
s += c;
} while (true);
return s;
}
float nextFloat()
{
float data;
reader.read((char*)(&data), sizeof(float));
return data;
}
double nextDouble()
{
double data;
reader.read((char*)(&data), sizeof(double));
return data;
}
bool nextBool()
{
bool data;
reader.read((char*)(&data), sizeof(bool));
return data;
}
char nextChar()
{
char c;
reader.read(&c, sizeof(char));
return c;
}
private:
std::ifstream reader;
};