Winforms / GDI + Тянут кривую для диаграммы

FileDescriptor - это объект, несущий дескриптор файла ОС, что означает, что это объект, несущий указатель файла.

Только один поток может одновременно использовать дескриптор файла / указатель файла, поскольку a FileDescriptor не поддерживает многопоточность. Доступ был синхронизирован.

Если вы хотите, чтобы два потока имели независимый доступ к файлу, вам нужны два FileDescriptors.

Чтобы доказать мою точку зрения на указатель общего файла, как вы думаете, что произойдет, если вы поочередно читаете из FileInputStream и пишете в FileOutputStream?

Вот код, показывающий, что происходит:

String fileName = "Test.txt";
Files.writeString(Paths.get(fileName), "abcdefghijklmnopqrstuvwxyz", StandardCharsets.US_ASCII);

try (RandomAccessFile raFile = new RandomAccessFile(fileName, "rw");
     FileInputStream in = new FileInputStream(raFile.getFD());
     FileOutputStream out = new FileOutputStream(raFile.getFD()) ) {

    byte[] buf = new byte[4];
    for (int i = 0; i < 3; i++) {
        int len = in.read(buf);
        System.out.println(new String(buf, 0, len, StandardCharsets.US_ASCII));

        out.write("1234".getBytes(StandardCharsets.US_ASCII));
    }
}

String s = Files.readString(Paths.get(fileName), StandardCharsets.US_ASCII);
System.out.println(s);

Вывод

abcd
ijkl
qrst
abcd1234ijkl1234qrst1234yz

Как видите, чтение 4 байтов возвращает байты 0-3 и перемещает указатель файла, поэтому запись 4 байтов заменяет байты 4- 7, затем чтение 4 байтов возвращает байты 8-11, а запись 4 байтов заменяет байты 12-15 и т. Д.

5
задан polygenelubricants 1 March 2010 в 22:44
поделиться

1 ответ

Это очень просто - не нужно никакой математики - просто используйте Graphics.DrawCurve вместо DrawPolygon / DrawLine (см. Очень хорошую справку по этой функции).

3
ответ дан 15 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: