Неверный аргумент в FileInputStream.seek (long.max_value)JAVA

Программисты JAVA общаются здесь
Anonymous
Неверный аргумент в FileInputStream.seek (long.max_value)

Сообщение Anonymous »

Я вычисляю длину метода inputstream с использованием skip (long.max_value) .

Код: Выделить всё

    public int size(String teslaContentEntry) {
int result = 0;
try (InputStream stream = read(teslaContentEntry)) {
if (stream != null) {
try {
result = (int) min(Integer.MAX_VALUE, stream.skip(Long.MAX_VALUE));
} finally {
StreamUtil.closeSilently(stream);
}
}
} catch (IOException e) {
error("Can't extract " + teslaContentEntry + " from " + element, e);
}
return result;
}

// The code below is provided on request from comments. It can safely be ignored
public synchronized InputStream read(String name) {
if (disposed) {
throw new IllegalStateException("Disposed");
}
File file = files.get(name);
if (file == null) {
return null;
}
waitUntilExtracted(name);
try {
if (!file.exists()) {
extractFile(name);
waitUntilExtracted(name);
}
} catch (IOException e) {
error("Can't extract " + name + " from " + element, e);
}
if (file.exists()) {
try {
return getInput(file);
} catch (FileNotFoundException e) {
RcpttPlugin.log(e);
}
}

return null;
}

private void waitUntilExtracted(String name) {
synchronized (extractions) {
while (extractions.contains(name)) {
try {
extractions.wait(100);
} catch (InterruptedException e) {
RcpttPlugin.log(e);
}
}
}
}

protected BufferedInputStream getInput(File file)
throws FileNotFoundException {
return new BufferedInputStream(new FileInputStream(file));
}

Следующая ошибка иногда возникает, когда inputstream является файлом в Jenkins ci, на размещенном агенте Kubernetes (Linux), запуска Java 21. Агент не доступен прямо.

Код: Выделить всё

Caused by: java.io.IOException: Invalid argument
at java.base/java.io.FileInputStream.skip0(Native Method)
at java.base/java.io.FileInputStream.skip(FileInputStream.java:444)
at java.base/java.io.BufferedInputStream.implSkip(BufferedInputStream.java:467)
at java.base/java.io.BufferedInputStream.skip(BufferedInputStream.java:446)
at org.eclipse.rcptt.core.persistence.BasePersistenceModel.size(BasePersistenceModel.java:390)
... 127 more
< /code>
Код вокруг довольно сложный, я не могу устранить гипотезу о одновременном доступе к файлу (например, для удаления). Но ошибка происходит слишком последовательно, чтобы предположить одновременную делецию. 
Я предположил, что Skip () 
является зависимым от файловой системы, но когда я создал пустой файл на одной и той же файловой системе Skip () хорошо работал с long.max_value . MVCE, мне нужно, по крайней мере, иметь какое -то представление о том, что происходит.
Что может вызвать такое исключение?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... -max-value

Вернуться в «JAVA»