Запись на Java:
File file = new File("abc");
try(FileOutputStream fos = new FileOutputStream(file)) {
FileChannel outChannel = fos.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES*3).order(ByteOrder.nativeOrder());
buffer.putInt(154);
buffer.putint(98);
buffer.putInt(6);
outChannel.write(buffer);
IntStream.rangeClosed(1,3).forEach((iter) -> {
String reqString = (Integer.toString(iter) + "_string");
byte[] bytes = reqString.getBytes(Charset.forName("US-ASCII"));
ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length).order(ByteOrder.nativeOrder());
byteBuffer.put(bytes);
try {
outChannel.write(byteBuffer);
}
catch(IOException ex) {
ex.printStackTrace();
}
});
}
catch(IOException ex) {
ex.printStackTrace();
}
Чтение в C:
int main () {
один, два, три;
FILE * fp = fopen ("abc", "r +");
fscanf(fp,"%d",&one);
fscanf(fp,"%d",&two);
fscanf(fp,"%d",&three);
printf("%d %d %d",one,two,three);
char ch;
fread(&ch,sizeof(char),1,fp);
while(ch!= '\0') {
printf("%c",ch);
fread(&ch,sizeof(char),1,fp);
}
return 0;
}
На что вывод:
Я не понимаю, что я вижу. Есть три значения и ни одно из которых не было написано мной. Это места памяти? или значения мусора?
В каком формате Java записывает файл. Поскольку C читает в исходном порядке базовой платформы, я пытался использовать ByteBuffer. Если я использую DataOutputService, я думаю, что Java пишет в формате `BIG_ENDIAN ', а C может не прочитать правильное значение.
Кроме того, как мне написать и прочитать строку в этом сценарии. Java по умолчанию использует UTF-8, следовательно, я не использовал FileOutputStream напрямую, вместо этого я преобразовал их в байты формата ASCII, чтобы я мог читать их символ за символом. Но вывод не отображается. Когда я могу использовать fscanf(fp,"%s",string)
(строка является переменной типа * char с выделенным достаточным объемом памяти) *?
Идеальным решением было бы то, где Java может записывать данные в определенном порядке, а C может читать их, используя fscanf()
, в результате было бы легче идентифицировать целые числа / числа с плавающей запятой / строки.