Ответ 1
Возможно, этот фрагмент поможет.
int i = 42;
DataOutputStream os = new DataOutputStream(new FileOutputStream("C:\\binout.dat"));
os.writeInt(i);
os.close();
Я пытаюсь записать данные в файл в двоичном формате для сжатия. Данные полностью состоят из плавающих точек, поэтому я решил квантовать данные на промежуточные между 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?
Возможно, этот фрагмент поможет.
int i = 42;
DataOutputStream os = new DataOutputStream(new FileOutputStream("C:\\binout.dat"));
os.writeInt(i);
os.close();
Как насчет DataOutputStream. Вы можете написать int, который содержит 2 ваших целых числа данных.
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();
}
}