第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

UnixFileSystem 的 Java File.renameTo() 實現(xiàn)

UnixFileSystem 的 Java File.renameTo() 實現(xiàn)

qq_笑_17 2023-01-05 17:19:04
我試圖弄清楚在 Java 中是如何工作的,并且在(我在 macOS 上)中找到File.renameTo()了以下方法。UnixFileSystem.javaprivate native boolean rename0(File f1, File f2);我明白(如果我錯了請更正)native意味著 JVM 調(diào)用用另一種語言編寫的代碼/庫。那么,我在哪里/如何或是否可能看到它的實現(xiàn)?我很想看看它的實現(xiàn),以確認我是否可以將它用于我的以下用例。我需要在兩個(或更多)不同的服務(wù)器上運行 Java 應(yīng)用程序,這些服務(wù)器輪詢同一目錄(共享文件系統(tǒng))中的文件,并且只有一個實例(服務(wù)器)應(yīng)該處理特定文件。每當(dāng)任何服務(wù)器中的應(yīng)用程序看到一個文件時,它都會嘗試移動到其他目錄,如果移動成功(由方法返回的布爾值File.renameTo()確定),該服務(wù)器開始處理這些文件內(nèi)容(準確地說是批處理) . 我用三個不同的實例對一個目錄進行了快速測試(以每秒 1000 個文件的速度生成新文件),結(jié)果符合預(yù)期。我只是想確認它是否可以擴展。請注意,我不是在移動實際文件,而是<actual-filename>.DONE在從源文件復(fù)制完成后創(chuàng)建的一個名為類似名稱的零字節(jié)文件。
查看完整描述

1 回答

?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

AFAIK,OpenJDK 和 Orale JDK 的來源幾乎相同rename0 因此,您可以在此處找到實現(xiàn):

#include <stdlib.h>


JNIEXPORT jboolean JNICALL

Java_java_io_UnixFileSystem_rename0(JNIEnv *env, jobject this,

                                    jobject from, jobject to)

{

    jboolean rv = JNI_FALSE;


    WITH_FIELD_PLATFORM_STRING(env, from, ids.path, fromPath) {

        WITH_FIELD_PLATFORM_STRING(env, to, ids.path, toPath) {

            if (rename(fromPath, toPath) == 0) {

                rv = JNI_TRUE;

            }

        } END_PLATFORM_STRING(env, toPath);

    } END_PLATFORM_STRING(env, fromPath);

    return rv;

}

你可以看到它實際上是在調(diào)用 libc 的rename. 由于大部分環(huán)境使用glibc這里是文檔:

rename 的一個有用特性是,newname 的含義從任何以前存在的具有該名稱的文件“原子地”更改為它的新含義(即,名為 oldname 的文件)。newname 在舊含義和新含義“之間”的任何時刻都不存在。如果在運行過程中出現(xiàn)系統(tǒng)崩潰,則有可能兩個名字都還存在;但如果 newname 存在的話,它將永遠是完整的。

也許你的代碼是安全的,只要它不崩潰,并且文件系統(tǒng)工作正常。但是,這可能取決于您使用的文件系統(tǒng)(例如 nfs)。



查看完整回答
反對 回復(fù) 2023-01-05
  • 1 回答
  • 0 關(guān)注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號