chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是I/O?

汽車電子技術(shù) ? 來源:程序猿知秋 ? 作者:程序猿知秋 ? 2023-01-20 17:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是I/O?

  • I/O 的全稱是input/output,即輸入和輸入設(shè)備,常見的輸入設(shè)備有:鍵盤、鼠標(biāo),輸出設(shè)備則比如 顯示器、音響 這樣的。
  • 對(duì)程序而言,IO就是與外面數(shù)據(jù)交換的方式, 數(shù)據(jù)向程序里面錄入就是 輸入,從程序往流出就是 輸出
  • IO在程序中的作用就是將數(shù)據(jù)轉(zhuǎn)換成 字節(jié),然后進(jìn)行交互

流(Stream)

C#中,所有流都是繼承自Stream類,Stream類定義了流應(yīng)該具有的行為和屬性,使得開發(fā)人員可以忽略底層的操作系統(tǒng)和基礎(chǔ)設(shè)備的具體細(xì)節(jié)。C#對(duì)流的處理忽略了讀流和寫流的區(qū)別,使其更像是一個(gè)管道,方便數(shù)據(jù)通信。

流涉及到三個(gè)基本操作:

  • 讀取 - 將數(shù)據(jù)從流中傳輸?shù)綌?shù)據(jù)結(jié)構(gòu)中
  • 寫入 - 將數(shù)據(jù)從數(shù)據(jù)源寫入流中
  • 查找 - 對(duì)流中操作的當(dāng)前位置進(jìn)行查找和修改

因?yàn)榱鞯奶匦裕赡懿⒉皇撬械牧鞫贾С诌@三種操作,所以Stream提供了三個(gè)屬性,以方便確認(rèn)流是否支持這三種操作:

  • public abstract bool CanRead { get; } // 獲取指示當(dāng)前流是否支持讀取的值
  • public abstract bool CanWrite { get; } // 獲取指示當(dāng)前流是否支持寫入功能的值
  • public abstract bool CanSeek { get; } // 獲取指示當(dāng)前流是否支持查找功能的值

**以上這三個(gè)屬性均由子類根據(jù)自身特性確認(rèn)是否支持讀取、寫入、查找,可能三個(gè)屬性不會(huì)都為true,但絕對(duì)不會(huì)都為false。
**

讀寫類

  • 字節(jié)流
    • BinaryReader和BinaryWriter
    • 字節(jié)流用來處理,人看不懂的內(nèi)容,如圖片、視頻等文件用文本打開看不懂的內(nèi)容
  • 字符流
    • TextReader和TextWriter
      • ****StreamReader和StreamWriter
      • StringReader和StringWriter
    • **用來處理人能看懂的內(nèi)容,用文本打開能看懂的內(nèi)容,如:自己寫的各種文本內(nèi)容
      **

常見的IO類

System.IO 命名空間有各種不同的類,用于執(zhí)行各種文件操作,如創(chuàng)建和刪除文件、讀取或?qū)懭胛募?,關(guān)閉文件等

I/O 類 描述
BinaryReader 從二進(jìn)制流讀取原始數(shù)據(jù)。
BinaryWriter 以二進(jìn)制格式寫入原始數(shù)據(jù)。
BufferedStream 字節(jié)流的臨時(shí)存儲(chǔ)。
Directory 有助于操作目錄結(jié)構(gòu)。
DirectoryInfo 用于對(duì)目錄執(zhí)行操作。
DriveInfo 提供驅(qū)動(dòng)器的信息。
File 有助于處理文件。
FileInfo 用于對(duì)文件執(zhí)行操作。
FileStream 用于文件中任何位置的讀寫。
MemoryStream 用于隨機(jī)訪問存儲(chǔ)在內(nèi)存中的數(shù)據(jù)流。
Path 對(duì)路徑信息執(zhí)行操作。
StreamReader 用于從字節(jié)流中讀取字符。
StreamWriter 用于向一個(gè)流中寫入字符。
StringReader 用于讀取字符串緩沖區(qū)。
StringWriter 用于寫入字符串緩沖區(qū)。

FileStream 類

用FileStream來創(chuàng)建或讀取一個(gè)文件對(duì)象,語法如下:

FileStream <object_name> = new FileStream( <file_name>,
<FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);

**如下,讀取aa.txt文件的內(nèi)容
**

FileStream fileStream = new FileStream(@"D:\\c#workspace\\練習(xí)\\aa.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
參數(shù) 描述
FileMode FileMode 枚舉定義了各種打開文件的方法。FileMode 枚舉的成員有:Append:打開一個(gè)已有的文件,并將光標(biāo)放置在文件的末尾。如果文件不存在,則創(chuàng)建文件。Create:創(chuàng)建一個(gè)新的文件。如果文件已存在,則刪除舊文件,然后創(chuàng)建新文件。CreateNew:指定操作系統(tǒng)應(yīng)創(chuàng)建一個(gè)新的文件。如果文件已存在,則拋出異常。Open:打開一個(gè)已有的文件。如果文件不存在,則拋出異常。OpenOrCreate:指定操作系統(tǒng)應(yīng)打開一個(gè)已有的文件。如果文件不存在,則用指定的名稱創(chuàng)建一個(gè)新的文件打開。Truncate:打開一個(gè)已有的文件,文件一旦打開,就將被截?cái)酁榱阕止?jié)大小。然后我們可以向文件寫入全新的數(shù)據(jù),但是保留文件的初始創(chuàng)建日期。如果文件不存在,則拋出異常。
FileAccess FileAccess 枚舉的成員有:Read、ReadWrite和Write。
FileShare FileShare枚舉的成員有:Inheritable:允許文件句柄可由子進(jìn)程繼承。Win32 不直接支持此功能。None:謝絕共享當(dāng)前文件。文件關(guān)閉前,打開該文件的任何請(qǐng)求(由此進(jìn)程或另一進(jìn)程發(fā)出的請(qǐng)求)都將失敗。Read:允許隨后打開文件讀取。如果未指定此標(biāo)志,則文件關(guān)閉前,任何打開該文件以進(jìn)行讀取的請(qǐng)求(由此進(jìn)程或另一進(jìn)程發(fā)出的請(qǐng)求)都將失敗。但是,即使指定了此標(biāo)志,仍可能需要附加權(quán)限才能夠訪問該文件。ReadWrite:允許隨后打開文件讀取或?qū)懭?。如果未指定此?biāo)志,則文件關(guān)閉前,任何打開該文件以進(jìn)行讀取或?qū)懭氲恼?qǐng)求(由此進(jìn)程或另一進(jìn)程發(fā)出)都將失敗。但是,即使指定了此標(biāo)志,仍可能需要附加權(quán)限才能夠訪問該文件。Write:允許隨后打開文件寫入。如果未指定此標(biāo)志,則文件關(guān)閉前,任何打開該文件以進(jìn)行寫入的請(qǐng)求(由此進(jìn)程或另一進(jìn)過程發(fā)出的請(qǐng)求)都將失敗。但是,即使指定了此標(biāo)志,仍可能需要附加權(quán)限才能夠訪問該文件。Delete:允許隨后刪除文件。

使用示例

public static void Main()
{
    // 定義文件流
    FileStream fileStream = new FileStream(@"D:\\c#workspace\\練習(xí)\\aa.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
   
    for (int i = 1; i <= 20; i++)
    {
        fileStream.WriteByte((byte)i);
    }


    // 文件開頭開始讀取
    fileStream.Position = 0;
    for (int i = 0; i <= 20; i++)
    {
        Console.Write(fileStream.ReadByte() + " ");
    }
    //關(guān)閉流
    fileStream.Close();
    Console.ReadKey();
}

**輸出結(jié)果如下:
**

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1

字符流 StreamReader 和 StreamWriter 類

用于文本文件的數(shù)據(jù)讀寫。這些類從抽象基類 Stream 繼承,Stream 支持文件流的字節(jié)讀寫

讀寫文件案例

static void test2()
{
    // 定義一個(gè)streamWriter寫一個(gè)文件
    string[] nameArray = { "張三", "李四", "王五" };
    // 使用using,用完后能自動(dòng)關(guān)流
    using(StreamWriter sw=new StreamWriter(@"D:\\c#workspace\\練習(xí)\\aa.txt"))
    {
        foreach(string str in nameArray)
        {
            // 一次寫一行
            sw.WriteLine(str);
        }
    }




    // 讀取剛寫入的文件
    using(StreamReader sr=new StreamReader(@"D:\\c#workspace\\練習(xí)\\aa.txt"))
    {
        string line;
        // 當(dāng)值為null,說明已經(jīng)讀完了文件
        while ((line =sr.ReadLine())!= null)
        {
            Console.WriteLine(line);
        }
    }


}

輸出結(jié)果

張三
李四
王五

字節(jié)流 BinaryReader 和 BinaryWriter 類用于二進(jìn)制文件的讀寫

復(fù)制圖片案例

static void test3()
{
    // 復(fù)制圖片


    byte[] imgArray = null;
    //先讀取原圖
    FileStream fs = new FileStream(@"D:\\c#workspace\\練習(xí)\\img\\1.jpg", FileMode.Open);
    using(BinaryReader br=new BinaryReader(fs))
    {
        imgArray = br.ReadBytes((int)fs.Length);
    }




    // 生成一個(gè)新的圖片
    FileStream fs2 = new FileStream(@"D:\\c#workspace\\練習(xí)\\img\\aaa.jpg", FileMode.Create);
    using (BinaryWriter bw = new BinaryWriter(fs2))
    {
        bw.Write(imgArray);
    }


}

Windows 文件系統(tǒng)的操作

C# 允許您使用各種目錄和文件相關(guān)的類來操作目錄和文件,比如 DirectoryInfo 類和 FileInfo 類。

  • DirectoryInfo 類派生自 FileSystemInfo 類。它提供了各種用于創(chuàng)建、移動(dòng)、瀏覽目錄和子目錄的方法。該類不能被繼承
  • FileInfo 類派生自 FileSystemInfo 類。它提供了用于創(chuàng)建、復(fù)制、刪除、移動(dòng)、打開文件的屬性和方法,且有助于 FileStream 對(duì)象的創(chuàng)建。該類不能被繼承

讀取指定目錄下的所有文件列表案例

static void test4()
{
    // 創(chuàng)建一個(gè) DirectoryInfo 對(duì)象
    DirectoryInfo mydir = new DirectoryInfo(@"D:\\c#workspace\\練習(xí)");


    // 獲取目錄中的文件以及它們的名稱和大小
    FileInfo[] f = mydir.GetFiles();
    foreach (FileInfo file in f)
    {
        Console.WriteLine("File Name: {0} Size: {1}",
            file.Name, file.Length);
    }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 輸入設(shè)備
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    8710
  • i/o
    i/o
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    4788
  • 輸出設(shè)備
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    2178
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    I/O電路中電壓比較器與I/O信號(hào)完整性介紹

    在高速I/O電路設(shè)計(jì)中,輸入I/O的比較器是一個(gè)非常重要的模塊。
    的頭像 發(fā)表于 10-30 15:02 ?2705次閱讀
    <b class='flag-5'>I</b>/<b class='flag-5'>O</b>電路中電壓比較器與<b class='flag-5'>I</b>/<b class='flag-5'>O</b>信號(hào)完整性介紹

    物理約束實(shí)踐:I/O約束

    I/O約束(I/O Constraints)包括I/O標(biāo)準(zhǔn)(
    的頭像 發(fā)表于 11-18 16:42 ?2351次閱讀
    物理約束實(shí)踐:<b class='flag-5'>I</b>/<b class='flag-5'>O</b>約束

    數(shù)字I/O介紹

    數(shù)字I/O腳有專用和復(fù)用。數(shù)字I/O腳的功能通過9個(gè)16位控制寄存器來控制??刂萍拇嫫鞣譃閮深悾海?)I/
    發(fā)表于 09-16 12:20 ?19次下載

    冗余I/O

    6.1 冗余I/O的定義當(dāng)I/O模塊以每?jī)蓚€(gè)一組組態(tài)成冗余對(duì)運(yùn)行時(shí),I/O模板即認(rèn)為是冗余配置。
    發(fā)表于 07-23 00:29 ?26次下載

    基于Rocket I/O模塊的高速I/O設(shè)計(jì)

    摘要: 介紹了采用Videx-ⅡPR0系列FPCA設(shè)計(jì)的應(yīng)用于下一代無線通信系統(tǒng)中的高速IO。由于充分利用芯片中集成的Rocket IO模塊,并采用差分輸入?yún)⒖紩r(shí)鐘、
    發(fā)表于 06-20 10:45 ?1591次閱讀
    基于Rocket <b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊的高速<b class='flag-5'>I</b>/<b class='flag-5'>O</b>設(shè)計(jì)

    什么是I/O地址

    什么是I/O地址 I/O地址中I是input的簡(jiǎn)寫,O是output的簡(jiǎn)寫,也就是輸入輸出地址
    發(fā)表于 02-05 10:01 ?1457次閱讀

    I/O擴(kuò)展(8255)模塊

    為用戶在中提供一個(gè)I/O 擴(kuò)展的方法,在設(shè)計(jì)過程遇到I/O不夠用時(shí)可以用此種方案。
    發(fā)表于 07-04 17:12 ?0次下載

    Java I/O 的相關(guān)方法分析

    I/O,即 Input/Output(輸入/輸出) 的簡(jiǎn)稱。就 I/O 而言,概念上有 5 種模型:blocking I/
    發(fā)表于 09-27 13:18 ?0次下載
    Java <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的相關(guān)方法分析

    介紹 I/O NI系統(tǒng),C系列的I/O模塊

    內(nèi)容包括:理想的確定性以太網(wǎng)I/O,具有確定性分布式I/O的NI系統(tǒng),C系列的I/O模塊,與La
    的頭像 發(fā)表于 06-14 06:19 ?5012次閱讀
    介紹 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> NI系統(tǒng),C系列的<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊

    PLC的I/O模塊如何選擇

    一般IO模塊的價(jià)格占PLC價(jià)格的一半以上。PLC的IO模塊有開關(guān)量IO模塊、模擬量
    發(fā)表于 05-19 08:54 ?1w次閱讀
    PLC的<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊如何選擇

    關(guān)于標(biāo)準(zhǔn)I/O庫(kù)執(zhí)行I/O操作

    當(dāng)在輸入和輸出中遇到換行符時(shí),標(biāo)準(zhǔn)I/O庫(kù)執(zhí)行I/O操作。這允許我們一次輸出一個(gè)字符,但只有在寫了一行之后才進(jìn)行實(shí)際I/
    的頭像 發(fā)表于 07-01 17:17 ?2802次閱讀

    STM32單片機(jī)---I/O應(yīng)用

    STM32單片機(jī)---(二)I/O應(yīng)用stm32I/O簡(jiǎn)介GPIO的8種工作模式stm32I/O
    發(fā)表于 12-17 18:33 ?18次下載
    STM32單片機(jī)---<b class='flag-5'>I</b>/<b class='flag-5'>O</b>應(yīng)用

    FANUC外部I/O點(diǎn)數(shù)不夠用了怎么辦?可以擴(kuò)展I/O點(diǎn)數(shù)嗎?

    FANUC外部I/O點(diǎn)數(shù)不夠用了怎么辦?可以擴(kuò)展I/O點(diǎn)數(shù)嗎? 擴(kuò)展FANUC的外部I/O點(diǎn)數(shù)是
    的頭像 發(fā)表于 02-18 15:21 ?3494次閱讀

    直接I/O庫(kù)

    電子發(fā)燒友網(wǎng)站提供《直接I/O庫(kù).pdf》資料免費(fèi)下載
    發(fā)表于 10-14 10:55 ?0次下載
    直接<b class='flag-5'>I</b>/<b class='flag-5'>O</b>庫(kù)

    I/O接口與I/O端口的區(qū)別

    在計(jì)算機(jī)系統(tǒng)中,I/O接口與I/O端口是實(shí)現(xiàn)CPU與外部設(shè)備數(shù)據(jù)交換的關(guān)鍵組件,它們?cè)诠δ?、結(jié)構(gòu)、作用及運(yùn)作機(jī)制上均存在顯著差異,卻又相互協(xié)同工作,共同構(gòu)建起CPU與外部設(shè)備之間的橋梁
    的頭像 發(fā)表于 02-02 16:00 ?2754次閱讀