我正在尝试将数据写入二进制格式的文件以进行压缩。数据完全由浮点组成,因此我决定将数据量化为0到65535之间的整数,这样数据就可以写成两位无符号整数,最终节省空间。但是,我需要将量化数据输出到二进制文件而不是人类可读的Ascii。
目前这就是我正在做的事情
@param outputFile包含已经量化的数据的文件作为.txt文件中的字符串
public void generateBinaryRioFile(String materialLibrary,
String outputFile, String group, String mtlAux) {
try {
// Create file
FileWriter fileStream = new FileWriter(outputFile);
try {
BufferedReader br = new BufferedReader(new FileReader(new File(
"idx.txt")));
while ((line = br.readLine()) != null) {
writer.write(line + "\n");
}
try {
br.close();
} catch (FileNotFoundException e) {
e.getMessage();
} catch (IOException e) {
e.printStackTrace();
} BufferedWriter writer = new BufferedWriter(fileStream);
然而,将该文件写为人类可读的字符串。我需要将它写成二进制数据。如何在Java中实现这一目标?
答案 0 :(得分:36)
也许这个片段会有所帮助。
int i = 42;
DataOutputStream os = new DataOutputStream(new FileOutputStream("C:\\binout.dat"));
os.writeInt(i);
os.close();
答案 1 :(得分:2)
DataOutputStream怎么样?您可以编写包含2个数据整数的int。
DataOutputStream dos = new DataOutputStream(new FileOutputStream(<path>));
ArrayList<Integer> list = new ArrayList<Integer>();
int sum;
for( int i = 0; i < list.size(); i++ ) {
if(i%2!=0){
sum |= list.get( i ).intValue()<<16;
dos.writeInt( sum );
} else {
sum = list.get( i ).intValue();
}
}