C專題8:文件操作1

1.C語言中的文件是什么?

????????所謂文件(file)一般指存儲在外部介質上數據的集合,比如我們經常使用的txt、bmp、jpg、exe、rmvb等等。這些文件各有各的用途,我們通常將它們存放在磁盤或者可移動盤等介質中。
文件無非就是一段數據的集合,這些數據可以是有規則的集合,也可以是無序的集合。操作系統也就是以文件為單位對數據進行管理的。也就是說,要訪問外部介質上的數據,必須先按照文件名進行查找,然后從該文件中讀取數據。要想寫數據到外部介質,必須得建立一個文件,然后再寫入。因此,你眼前的文件只是數據的集合。

1.1文件一般包括三要素:

????????文件路徑、文件名、后綴。
由于在C語言中''一般是轉義字符的起始標志,故在路徑中需要用兩個''表示路徑中目錄層次的間隔,也可以使用'/'作為路徑中的分隔符。
例如:
"D:\\123\\test.c"或者"D:/123/test.c",表示文件test.c保存在D盤123目錄下。
"tu.txt"表示當前目錄下的文件tu.txt。
文件路徑:可以顯式指出其絕對路徑,如上面的"D:\\"或者"D:/"等。如果沒有顯式指出其路徑,默認認為當前路徑。也就相對路徑。
數據的輸入和輸出幾乎伴隨著每個C語言程序,所謂輸入就是從"源端"獲取數據,所謂輸出可以理解為向"終端"寫入數據。這里的源端可以是鍵盤、鼠標、硬盤、光盤、掃描儀等輸入設備,終端可以是顯示器、硬盤、打印機等輸出設備。在C語言中,把這些輸入和輸出設備也看作"文件"。

1.2?C語言文件系統中的類型

FILE:對象類型,足以保有控制?C?I/O?流所需的全部信息
fpos_t:非數組完整對象類型,足以唯一指定文件的位置和多字節剖析狀態
每個?FILE?對象直接或間接保有下列信息:
●??(C95)字符寬度:未設置、窄或寬。
●??(C95)多字節與寬字符間轉換的分析狀態(mbstate_t類型對象)
●??緩沖狀態:無緩沖、行緩沖、全緩沖。
●??緩沖區,可為外部的用戶提供緩沖區所替換。
●??I/O?模式:輸入、輸出或更新(兼具輸入與輸出)。
●??二進制/文本模式指示器。
●??文件尾指示器。
●??錯誤狀態指示器。
●??文件位置指示器,可作為fpos_t類型對象訪問,對于寬流包含剖析狀態。
●??(C11)在多個線程讀、寫、尋位或查詢流時避免數據競爭的再入鎖。

1.3?預定義標準流

●?stdin?與標準輸入流關聯的?FILE*?類型表達式
●?stdout?與標準輸出流關聯的?FILE*?類型表達式
●?stderr?與標準錯誤輸出流關聯的?FILE*?類型表達式

1.4 宏常量

2.流的概念及分類

????????I/O設備的多樣性及復雜性,給程序設計者訪問這些設備帶來了很大的難度和不便。為此,ANSIC的I/O系統即標準I/O系統,把任意輸入的源端或任意輸出的終端,都抽象轉換成了概念上的“標準I/O設備”或稱“標準邏輯設備”。程序繞過具體設備,直接與該“標準邏輯設備”進行交互,這樣就為程序設計者提供了一個不依賴于任何具體I/O設備的統一操作接口,通常把抽象出來的“標準邏輯設備”或“標準文件”稱作“流”。
把任意I/O設備,轉換成邏輯意義上的標準I/O設備或標準文件的過程,并不需要程序設計者感知和處理,是由標準I/O系統自動轉換完成的。故從這個意義上,可以認為任意輸入的源端和任意輸出的終端均對應一個“流”。
●流按方向分為:輸入流和輸出流。從文件獲取數據的流稱為輸入流,向文件輸出數據稱為輸出流。
●流按數據形式分為:文本流和二進制流。文本流是ASCII碼字符序列,而二進制流是字節序列。
●流是一種抽象的概念,負責在數據的產生者和數據的使用者之間建立聯系,并管理數據的流動。

3.文本文件和二進制文件到底有什么區別:

根據文件中數據的組織形式的不同,可以把文件分為:文本文件和二進制文件。
●?文本文件:把要存儲的數據當成一系列字符組成,把每個字符的?ASCII?碼值存入文件中。每個?ASCII?碼值占一個字節,每個字節表示一個字符。故文本文件也稱作字符文件或?ASCII?文件,是字符序列文件。
●?二進制文件:把數據對應的二進制形式存儲到文件中,是字節序列文件。

4.C語言與文件讀寫

文件庫函數stdio.h鏈接:http://www.cplusplus.com/reference/cstdio/
C語言操作文件分為三步,1)打開文件,2)讀寫文件,3)關閉文件。

4.1?打開文件函數原型:FILE?*?fopen?(?const?char?*?filename,?const?char?*?mode?);?

函數參數:?
filename:文件名,包括路徑,如果不顯式含有路徑,則表示當前路徑。例如,"D:\\text.txt"表示D盤根目錄下的文件text.txt文件。
mode:文件打開模式,指出對該文件可進行的操作。常見的打開模式如"r"表示只讀,"w"表示只寫,"rw"表示讀寫,"a"表示追加寫入。
返回值:
打開成功,返回該文件對應的?FILE?類型的指針;打開失敗,返回?NULL。故需定義?FILE?類型的指針變量,保存該函數的返回值。可根據該函數的返回值判斷文件打開是否成功。

4.2?關閉函數fclose的原型:int?fclose(FILE*?stream);

函數參數
stream:指向要關閉流對象的指針。
返回值:
如果流被成功關閉,返回0值。失敗時,返回EOF(-1)。即使調用失敗,作為參數傳遞的流將不再與文件或其緩沖區關聯。

4.3?字符串格式化函數原型int?sprintf(char*?str,?const?char*?format,?...);

函數參數
str:指向緩沖區指針,緩沖區足夠大。
format:格式化字符串,該字符串遵循與printf中的格式相同的規范。
...:附加參數(根據格式化字符串的不同,函數可能需要一系列附加參數,每個參數都包含一個值,用于替換格式字符串中的格式說明符)。
返回值:
如果成功,將返回寫入的字符總數。此計數不包括自動附加在字符串末尾的額外空字符。失敗返回負數。

注意:Windows?OS?上的?C?流在輸出時將'\n'轉換為'\r\n',輸入時將'\r\n'轉換為'\n'。

4.4?格式化寫入函數int?fprintf?(?FILE?*?stream,?const?char?*?format,?...?);

輸出函數
int?printf?(?const?char?*?format,?...?);
示例:

?

4.5?從流中讀取格式化數據函數int?fscanf(FILE*?stream,?const?char*?format,?...?);

函數參數
stream:指向文件對象的指針,該對象標識要從中讀取數據的輸入流。
format:格式化字符串,該字符串遵循與scanf中的格式相同的規范。
返回值
成功賦值的接收參數的數量(可以為零,在首個接收用參數賦值前匹配失敗的情況下),或者若輸入在首個接收用參數賦值前發生失敗,則為EOF。

#include <stdlib.h>
#include <stdio.h>
int main()
{const int n = 10;int ar[n]={0};int i = 0;FILE *fpr = fopen("Test.txt","r");if(NULL == fpr){printf("open file failter \n");exit(EXIT_FAILURE);}for(i = 0;i<n;++i){fscanf(fpr,"%d ",&ar[i]);}fclose(fpr);fpr = NULL;return 0;
}

4.6?二進制文件的讀寫

????????塊數據寫入函數:size_t?fwrite?(?const?void?*?ptr,?size_t?size,?size_t?count,?FILE?*?stream?);
函數參數:
ptr:這是指向要被寫入的元素數組的指針。
size:這是要被寫入的每個元素的大小,以字節為單位。
count:這是元素的個數,每個元素的大小為?size?字節。
stream:這是指向?FILE?對象的指針,該?FILE?對象指定了一個輸出流。
返回值:
返回成功寫入元素的個數,若出現錯誤或到達文件末尾,則可能小于?count。如果返回的數值與?count?參數值不同,則寫入錯誤將阻止函數完成。在這種情況下,將為流設置錯誤指示器(ferror)。
塊數據讀出函數:size_t?fread?(?void?*?ptr,?size_t?size,?size_t?count,?FILE?*?stream?);
函數參數:
ptr:指向大小至少為(size*count)字節的內存塊的指針,從流中讀出的數據存儲到ptr指向的內存。
size:讀取元素的大小,unsigned?int。
count:讀取取元素的個數。
stream:是指向?FILE?對象的指針,該?FILE?對象指定了一個輸入流。
返回值:
返回成功讀取的對象個數,若出現錯誤或到達文件末尾,則可能小于?count。若?size?或?count?為零,則?fread?返回零且不進行其他動作。fread?不區分文件尾和錯誤,因此調用者必須用?feof?和?ferror?才能判斷發生了什么。

#include <stdlib.h>
#include <stdio.h>
#define ARSIZE 10void Save_Ar(int *ar, int n)
{FILE *fpw = NULL;int len = 0;if(NULL == ar || n < 1) return ;fpw = fopen("Test2.txt", "wb");if(NULL == fpw){printf("open file failure \n");exit(EXIT_FAILURE);}len = fwrite(ar, sizeof(int), n, fpw);fclose(fpw);fpw = NULL;
}void Load_Ar(int *br, int n)
{FILE *fpr = NULL;int len = 0;if(NULL == br || n < 1) return;fpr = fopen("Test2.txt", "rb");if(NULL == fpr){printf("open file failure \n");exit(EXIT_FAILURE);}len = fread(br, sizeof(int), n, fpr);fclose(fpr);fpr = NULL;
}int main()
{int ar[ARSIZE] = {12, 23, 34, 45, 56, 67, 78, 89, 90, 100};int br[ARSIZE] = {0};int n = ARSIZE;Save_Ar(ar, n);Load_Ar(br, n);return 0;
}

5.緩沖和非緩沖文件系統

????????在ANSI?C標準中,使用的是“緩沖文件系統”。所謂緩沖文件系統指系統自動地在內存為每一個正在使用的文件名開辟一個緩沖區,從內存向磁盤輸出數據必須先送到內存中的緩沖區,裝滿后再一起送到磁盤去。反向也是如此。vs2012?stdio.h中的FILE結構體:

?int?fflush(?FILE?*stream?);
功能:清除讀寫緩沖區,在需要立即把輸出緩沖區的數據進行物理寫入時
函數說明
如果指針指向一個輸出流或者是一個最近的一次操作不是輸入的更新流,輸出刷新將會創造任意未寫入的數據給將要被寫入文件的流和最近的數據被修改流,并且最后的文件狀態改變應該被標記為更新的基礎文件的時間戳。
對于打開以使用基礎文件描述進行讀取的流,如果文件尚未處于EOF,并且該文件是能夠搜索的文件,則基礎打開文件描述的文件偏移量應設置為流的文件位置,并且任何未被從流中讀取的?ungetc?()?或?ungetwc?()?推回到流上的字符都將被丟棄(不再進一步改變文件偏移量)。
如果?stream?是空指針,則?fflush?()?將對上面定義了行為的所有流執行此刷新操作。
返回值
如果成功刷新,?fflush?返回?0。指定的流沒有緩沖區或者只讀打開時也返回?0?值。返回?EOF?指出一個錯誤。
注意:如果?fflush?返回?EOF,數據可能由于寫錯誤已經丟失。當設置一個重要錯誤處理器時,最安全的是用?setvbuf?函數關閉緩沖或者使用低級?I/O?例程,如?open、close?和?write?來代替流?I/O?函數。
其他用法
fflush(stdin)刷新標準輸入緩沖區,把輸入緩沖區里的東西丟棄[非標準]
fflush(stdout)刷新標準輸出緩沖區,把輸出緩沖區里的東西打印到標準輸出設備上
注意事項
C?和?C++?的標準里從來沒有定義過?fflush(stdin)。也許有人會說:"可是我用?fflush(stdin)?解決了這個問題,你怎么能說是錯的呢?"?的確,某些編譯器(如?VC6)支持用?fflush(stdin)?來清空輸入緩沖,但是并非所有編譯器都要支持這個功能(linux?下的?gcc?就不支持),因為標準中根本沒有定義?fflush(stdin)。
MSDN?文檔里也清楚地寫著:fflush?on?input?stream?is?an?extension?to?the?C?standard?(?fflush?操作輸入流是對?C?標準的擴充)。
以下是?C99?對?fflush?函數的定義:int?fflush(FILE?*stream);
如果?stream?指向輸出流或者更新流?(update?stream),并且這個更新流最近執行的操作不是輸入,那么?fflush?函數將把任何未被寫入的數據寫入?stream?指向的文件(如標準輸出文件?stdout)。否則,?fflush?函數的行為是不確定的。?fflush?(NULL)?清空所有輸出流和上面提到的更新流。如果發生寫錯誤,?fflush?函數會給那些流打上錯誤標記,并且返回?EOF,否則返回?0。
由此可知,如果?stream?指向輸入流(如?stdin),那么?fflush?函數的行為是不確定的。故而使用?fflush(stdin)?是不正確的。

void?setbuf(FILE?*stream,?char?*buffer);
功能:設置用于流操作的內部緩沖區。其長度至少應該為BUFSIZ個字符。
若buffer非空,則等價于setvbuf(stream,buffer,_IOFBF,BUFSIZ)
若buffer為空,則等價于setvbuf(stream,NULL,_IOBNF,0),這會關閉緩沖。
參數:
stream:要設置緩沖區的文件流
buffer:指向文件流所用的緩沖區的指針。若提供空指針,則關閉緩沖。
返回值無。
注解
若BUFSIZ不是適合的緩沖區大小,則能用setvbuf更改它。
setvbuf亦應當用于檢測錯誤,因為setbuf不指示成功或失敗。
此函數僅可在已將stream關聯到打開的文件后,但要在任何其他操作(除了對setbuf/setvbuf的失敗調用)前使用。
一個常見錯誤是設置stdin或stdout的緩沖區為生存期在程序終止前結束的數組:

int?main(void)?
{char?buf[BUFSIZ];setbuf(stdin,buf);
}?//buf的生存期結束,未定義行為
int main()
{ char buff[256]; int a = 10, b = 20; FILE *pf = fopen("yhp.txt","w"); setbuf(pf,buff); fprintf(pf,"a = %d b = %d \n",a,b); fclose(pf); pf = NULL; return 0; 
}

函數原型
int?setvbuf(?FILE?*stream,?char?*buffer,?int?mode,?size_t?size?);
功能
以?mode所指示值更改給定文件流?stream的緩沖模式。
緩沖策略
??若?buffer為空指針??:重設內部緩沖區大小為?size。
??若?buffer非空指針??:指示流使用始于?buffer而大小為?size的用戶提供緩沖區。
必須在?buffer所指向的數組的生存期結束前(用?fclose關閉流)。
成功調用?setvbuf后,數組內容不確定,任何使用它的嘗試是未定義行為。
參數
??stream??:要設置緩沖的文件流。
??buffer??:指向要使用的流緩沖區的指針;若僅更改大小和模式則為空指針。
??mode??:使用的緩沖模式(可選值):
_IOFBF:??全緩沖??(當緩沖區為空時從流讀入數據;緩沖區滿時向流寫入數據)。
_IOLBF:??行緩沖??(每次從流中讀入一行數據或向流中寫入一行數據)。
_IONBF:??無緩沖??(直接從流讀入或寫入數據;緩沖設置無效)。
??size??:緩沖區的大小。
返回值
成功時返回?0。失敗時返回??非零值??。
注意
此函數僅可在已將?stream關聯到打開的文件后使用(在任何其他操作前,除對?setbuf/setvbuf的失敗調用)。實際緩沖區大小可能向下取整(如到?2?的倍數、頁面大小的倍數等);并非所有?size字節都用于緩沖。??行緩沖限制??:多數實現中,行緩沖(_IOLBF)僅對終端輸入流可用。
??一個常見錯誤是設置stdin或stdout的緩沖區為生存期在程序終止前結束的數組:

// 錯誤示例:局部數組作緩沖區導致未定義行為
int main(void) {char buf[BUFSIZ];setvbuf(stdin, buf, _IOFBF, BUFSIZ);
} // buf 的生存期結束,后續操作未定義

????????期待默認緩沖區大小BUFSIZ為實現上文件I/O的最高效緩沖區大小,但POSIX fstat經常提供更好的估計。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92604.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92604.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92604.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Opencv C# 重疊 粘連 Overlap 輪廓分割 (不知道不知道)

先上效果圖一種基于凹陷檢測重疊輪廓分割的方法這兩個星期壓力大的一批&#xff0c;心臟都給干得亂跳了&#xff0c;現在高血壓心率不齊貧血。兄弟們保重身體啊。簡單說下邏輯&#xff1a;前處理&#xff1a;的噼里啪啦我就不說了&#xff0c;根據樣品來(灰度&#xff0c;濾波&…

CentOS7 安裝 rust 1.82.0

CentOS7 安裝 rust 1.82.0 我在CentOS7.9中安裝rust遇到報錯版本低&#xff0c;再升級版本的過程中遇到諸多問題&#xff0c;簡單記錄。 遇到的問題 提示版本低 centos7 安裝 ERROR: Rust 1.75.0 or newer required.Rust version 1.72.1 was found.原因是 CentOS7 的默認的軟件…

Compose 適配 - 鍵鼠模式

一、概念不止觸摸交互&#xff0c;在 ChromeOS 或外接鍵鼠的設備上&#xff0c;需要考慮焦點、懸停、右鍵等操作邏輯。二、使用2.1 焦點使用 Tab 鍵來導航&#xff0c;改變邊框以提供清晰的焦點指示器。Composable fun Demo() {val interactionSource remember { MutableInter…

征服 Linux 網絡:核心服務與實戰解析

在當今的IT基礎設施中&#xff0c;Linux作為服務器操作系統的基石&#xff0c;其強大的網絡功能是其不可或缺的優勢。對于任何志在成為高級系統管理員或運維工程師的人來說&#xff0c;精通Linux網絡配置與服務管理是核心競爭力。 與日常應用不同&#xff0c;Linux網絡管理往往…

Spark 之 DataFrame

# foreach useFeatureDF.rdd.foreachPartition {iter => iter.foreach {row =>val userId = row.getAs[Int]

射頻信號(大寬高比)時頻圖目標檢測anchors配置(下)

書接上文&#xff1a; 射頻信號&#xff08;大寬高比&#xff09;時頻圖目標檢測anchors配置&#xff08;上&#xff09; 三、4090加成檢測效果深度優化 在4090 24G專用顯存加持下繼續探究大寬高比目標檢測的奧秘&#xff1a; Conda環境遷移至租的云服 在云服上第一次測試…

跨境支付入門~國際支付結算(區塊鏈篇)

摘要Web3區塊鏈技術架構解析&#xff1a;從底層共識到應用生態本文系統梳理了Web3作為穩定幣基礎設施的技術架構&#xff0c;采用"數字共和國"的比喻框架&#xff0c;將區塊鏈技術分解為六大核心模塊&#xff1a;憲法根基&#xff08;區塊鏈層&#xff09;&#xff1…

Docker 私服

什么是 Docker 私服&#xff1f; Docker 官方的 Docker Hub 是一個用于管理公共鏡像的倉庫&#xff0c;我們可以從上面拉取鏡像 到本地&#xff0c;也可以把我們自己的鏡像推送上去。 但是&#xff0c;有時候我們的服務器無法訪問互聯網&#xff0c;或者你不希望將自己的鏡像…

DeepSeek vs ChatGPT:誰更勝一籌?

新興 AI 聊天機器人的崛起與挑戰&#xff1a;對話模型發展觀察近年來&#xff0c;生成式人工智能領域持續取得突破&#xff0c;聊天機器人作為其中的代表&#xff0c;廣泛應用于寫作、編程、問答和信息處理等任務。2025 年初&#xff0c;國內某 AI 團隊宣布了多項模型技術進展&…

飛算科技:以原創技術為翼,賦能產業數字化轉型

在數字經濟浪潮席卷全球的當下&#xff0c;一批專注于技術創新的中國企業正加速崛起&#xff0c;飛算數智科技&#xff08;深圳&#xff09;有限公司&#xff08;簡稱 “飛算科技”&#xff09;便是其中的佼佼者。作為一家國家級高新技術企業&#xff0c;飛算科技以自主創新為核…

電商接口什么意思?

“電商接口”這四個字&#xff0c;在中文互聯網上出現的頻次越來越高&#xff1a;商家后臺、小程序、ERP、數據大屏……幾乎任何與線上零售沾邊的場景都會提到它。然而&#xff0c;對大多數剛進入電商行業的新人&#xff0c;甚至一些已經開了很多年網店的老板來說&#xff0c;這…

前端面試專欄-前沿技術:30.跨端開發技術(React Native、Flutter)

&#x1f525; 歡迎來到前端面試通關指南專欄&#xff01;從js精講到框架到實戰&#xff0c;漸進系統化學習&#xff0c;堅持解鎖新技能&#xff0c;祝你輕松拿下心儀offer。 前端面試通關指南專欄主頁 前端面試專欄規劃詳情 跨端開發技術&#xff08;React Native、Flutter&am…

復盤—MySQL觸發器實現監聽數據表值的變化,對其他數據表做更新

文章目錄 MySQL交換數據庫表中兩列的值(額外的知識) 為防止后面有疑問,提前解釋為什么需要 `$$` ? 第一版需求 第二版需求 第三版需求 注意事項: 存在的嚴重問題 最終版 關鍵修復說明: 完整測試場景: 額外建議(如果需要顯式處理NULL): COALESCE函數 業務中出現的問題…

SpringCloud【Sentinel】

1&#xff0c;工作原理 2&#xff0c;常見規則 流量控制&#xff08;FlowRule&#xff09; 1&#xff0c;閾值類型設置如下 單機均攤&#xff1a;每個機器均攤&#xff0c;比如閾值填5&#xff0c;三個機器&#xff0c;就個機器都可以有5個 總體閾值&#xff1a;所有機器總閾…

解構未來金融:深入剖析DeFi與去中心化交易所(DEX)的技術架構

今天&#xff0c;我們來聊一個顛覆傳統金融界的熱門話題——DeFi&#xff08;去中心化金融&#xff09;。大家可能聽說過它如何承諾將銀行、交易所、保險等金融服務構建在一個開放、無需許可的區塊鏈網絡上。而這一切魔法的核心&#xff0c;正是其獨特的“技術架構”。 在這篇文…

中國西北典型綠洲區土壤水分特征(2018-2019年)

數據集摘要該數據包含張掖綠洲黑河沿岸濕地、過渡帶楊樹林土壤水分、溫度數據。數據采集時間為2018年至2019年&#xff0c;采集地點為張掖綠洲&#xff0c;數據為日數據。該數據集是按照課題制定的試驗方案和中國生態系統研究網絡編著的陸地生態系統水土氣生觀測規范進行數據的…

MySQL高可用部署

目錄 一、MHA&#xff08;一主多從模式&#xff09; 1.環境準備&#xff08;所有節點&#xff09; 2. 部署 MySQL 主從復制&#xff08;MasterSlave&#xff09; 3.部署 MHA Manager&#xff08;管理節點&#xff09; &#xff08;1&#xff09;安裝 MHA Manager &#xf…

從 XSS 到 Bot 攻擊:常見網絡攻擊防不勝防?雷池 WAF 用全場景防護為網站筑牢安全墻

1. 網絡攻擊類型當前常見的網絡攻擊類型包括&#xff1a;重放攻擊&#xff08;HTTP Request Replay Attack&#xff09;&#xff1a;攻擊者截獲合法用戶的 HTTP 請求并重新發送&#xff0c;以欺騙服務器執行相同操作。危害包括消耗服務器資源、大量抓取數據或繞過認證操作敏感接…

【王樹森推薦系統】推薦系統漲指標的方法05:特殊用戶人群

為什么要特殊對待特殊人群&#xff1f; 新用戶&#xff0c;低活用戶的行為很少&#xff0c;個性化推薦不準確。個性化的召回和排序都需要基于用戶的歷史行為&#xff0c;如果歷史行為少&#xff0c;個性化就做不好&#xff0c;尤其是新用戶&#xff0c;這就需要策略把個性化做的…

Java 大視界 -- Java 大數據在智能家居能源管理與節能優化中的深度應用(361)

Java 大視界 -- Java 大數據在智能家居能源管理與節能優化中的深度應用&#xff08;361&#xff09;引言&#xff1a;正文&#xff1a;一、Java 構建的智能家居能源數據架構1.1 多源能耗數據實時采集1.2 家庭能源畫像與異常檢測二、Java 驅動的節能策略與智能控制2.1 多場景節能…