0 0

关于Openjdk FileInputSteam native 方法 available 的实现细节0

我想了解FileInputSteam  native  available 的实现细节,然后我下载openjdk,打开FileInputStream.c ,主要代码是:

关于这段代码谁对C了解的,能帮忙解释一下吗?
if (IO_Available(fd, &ret)) {
        if (ret > INT_MAX) {
            ret = (jlong) INT_MAX;
        }
        // 这个在jlong_md.h 里面,转换成int
        return jlong_to_jint(ret);
    }
    JNU_ThrowIOExceptionWithLastError(env, NULL);
    return 0;
}

我想了解available 方法是通过seek 移动的方式?还是获取文件描述的方式 获得流的大小,以及发生阻塞的情况,会出现什么问题,因为JDK 解释available 不保证返回的正确性,也就是说当文件流1000字节,会有返回几百字节的发生吗?

想了解这个情况发生的场景以及具体代码的原因,因此请大神们指点下这里的实现细节,最好能贴一下代码,不要纯理论知识。

问题补充:方法是:
JNIEXPORT jint JNICALL
Java_java_io_FileInputStream_available(JNIEnv *env, jobject this) {
    jlong ret;
    FD fd = GET_FD(this, fis_fd);
    if (fd == -1) {
        JNU_ThrowIOException (env, "Stream Closed");
        return 0;
    }
    if (IO_Available(fd, &ret)) {
        if (ret > INT_MAX) {
            ret = (jlong) INT_MAX;
        }
        return jlong_to_jint(ret);
    }
    JNU_ThrowIOExceptionWithLastError(env, NULL);
    return 0;
}
目前还没有答案

相关推荐

    openjdk-8-src-b132-03_mar_2014-windows-native.zip

    在OpenJDK 8中,有一部分源代码是专门针对Windows操作系统的本机(Native)方法实现的。这部分代码位于名为"openjdk-8-src-b132-03_mar_2014-windows-native.zip"的压缩包中,它是OpenJDK在Windows平台上的关键组成...

    快速下载 openjdk 方法.txt

    快速下载 openjdk 方法 快速下载 openjdk 方法 快速下载 openjdk 方法 快速下载 openjdk 方法 快速下载 openjdk 方法

    使用native方法调用C程序

    使用`native`关键字标记的方法表示其实现将在本地代码中提供,例如: ```java public class NativeDemo { public native void callCFunction(); static { System.loadLibrary("native-lib"); } } ``` 这里的`...

    openjdk 资源包下载和解包的方法

    标题中的“openjdk 资源包下载和解包的方法”指的是如何获取并处理OpenJDK(Open Source Java Development Kit)的软件包。OpenJDK是Java编程语言的一个开源实现,它提供了Java运行环境(JRE)和开发工具集(JDK)。...

    OpenJDK中rt.jar源码文件

    通过源码,开发者可以了解哪些方法是native方法,哪些操作可能导致系统调用,从而避免不必要的性能瓶颈。例如,了解`String`类的不可变性,以及它的`intern()`方法的作用,可以帮助优化字符串处理。 7. **调试与...

    openjdk1.6

    OpenJDK 1.6是Java Development Kit的一个开源实现,它是Java编程语言和Java平台标准版(Java SE)的一部分。OpenJDK项目的目标是提供一个免费、开源的Java实现,鼓励社区参与和透明度,使得开发者可以查看并修改源...

    ubuntu下openjdk7 openjdk8

    接下来是OpenJDK8,它是Java SE 8的开源实现,增加了Lambda表达式、方法引用、Stream API、Date和Time API等新特性。在Ubuntu上安装OpenJDK8的步骤与安装OpenJDK7类似: ```bash sudo apt-get update sudo apt-get ...

    openjdk-6.tar.gz

    OpenJDK 6是Java开发工具包的一个开源实现,它为开发者提供了运行和构建Java应用程序所需的环境。在Linux操作系统上,OpenJDK 6扮演着与Oracle JDK相似的角色,但它是免费的,并且遵循GNU General Public License...

    java-1.8.0-openjdk

    3. **OpenJDK 8**: OpenJDK 8 是 OpenJDK 的一个重大版本,引入了许多关键特性,如 Lambda 表达式、方法引用、Stream API、默认方法等,这些都极大地提高了 Java 语言的生产力和性能。 4. **Windows x86_64**: 这个...

    open-jdk-8源码包(包括native源码)

    openjdk 8 的源代码包,其中包含了native部分的源代码(c语言编写),在使用集成开发环境查看源代码时,无法查看到的native源码可以在这里找到。

    openjdk 1.7 windows 64位

    OpenJDK 1.7,也被称为Java Development Kit (JDK) 7,是由OpenJDK社区开发的一个开源实现,它是Java平台标准版(Java SE)的免费版本。这个版本的OpenJDK专为Windows 64位操作系统设计,因此在64位Windows环境下...

    openjdk1.8 windows64位操作系统

    OpenJDK是Java Development Kit的开源实现,由甲骨文公司(Oracle)和其他贡献者共同维护。1.8是Java的一个重要版本,它包含了丰富的特性和性能优化。 描述中提到的"windows 64位操作系统 jdk 直接解压,配置环境...

    openjdk8 with javafx

    OpenJDK8 with JavaFX 是一个开放源代码的Java开发工具包,它包含了Java标准版(Java SE)的实现,以及JavaFX库。OpenJDK是Oracle JDK的开源替代品,由OpenJDK社区维护和开发,而JavaFX是构建桌面、移动和Web应用...

    openjdk11openjdk11openjdk11openjdk11openjdk11openjdk11openjdk11o

    openjdk11 full javafx

    基于ARM架构的OpenJDK1.8

    OpenJDK(Open Source Java Development Kit)是一个开源的Java开发工具包,它实现了Java虚拟机(JVM)和Java类库,是Java应用程序的基础。OpenJDK是Oracle JDK的替代品,两者在功能上大体相似,但OpenJDK遵循GPL...

    openjdk1.8.zip

    OpenJDK(Open Source Java Development Kit)是Java平台标准版(Java SE)的一个开源实现,由甲骨文公司和其他贡献者共同维护。这个版本1.8,也称为Java 8,是Java历史上的一个重要版本,它引入了许多新特性,如...

    openjdk-17 GA(openjdk-17_linux-aarch64_bin.tar.gz)

    OpenJDK是一个开源实现的Java SE(Standard Edition)平台,它由Oracle公司发起,但现在由一个广泛的开发者社区共同维护和开发。 **1. OpenJDK和Oracle JDK的区别** OpenJDK是Java开发和运行环境的基础,它是免费且...

    openjdk-1.8.0_181

    OpenJDK,全称为Open Java Development Kit,是Java开发工具包的一个开源实现,它为开发者提供了构建、运行Java应用程序所需的全部工具。本文将重点讨论OpenJDK 1.8.0_181版本,它是Oracle JDK 8的一个分支,对于...

    openjdk-18(openjdk-18+36_windows-x64_bin.zip)

    OpenJDK 18是Java开发的一个开源实现,由OpenJDK社区维护并遵循GNU General Public License (GPL)。这个版本的OpenJDK是针对Windows x64平台的,其安装包为“openjdk-18+36_windows-x64_bin.zip”。此压缩文件包含了...

    openjdk 21 下载 ,开源版本

    OpenJDK项目是由甲骨文公司发起并维护,旨在提供一个免费、开源的实现,与Oracle JDK保持兼容。OpenJDK 21是该系列的一个特定版本,它可能包含了新功能、性能优化以及安全更新。 首先,让我们深入了解一下OpenJDK。...

Global site tag (gtag.js) - Google Analytics