一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是I/O?

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

掃碼添加小助手

加入工程師交流群

什么是I/O?

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

流(Stream)

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

流涉及到三個基本操作:

  • 讀取 - 將數(shù)據(jù)從流中傳輸?shù)綌?shù)據(jù)結構中
  • 寫入 - 將數(shù)據(jù)從數(shù)據(jù)源寫入流中
  • 查找 - 對流中操作的當前位置進行查找和修改

因為流的特性,可能并不是所有的流都支持這三種操作,所以Stream提供了三個屬性,以方便確認流是否支持這三種操作:

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

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

讀寫類

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

常見的IO類

System.IO 命名空間有各種不同的類,用于執(zhí)行各種文件操作,如創(chuàng)建和刪除文件、讀取或寫入文件,關閉文件等

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

FileStream 類

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

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

**如下,讀取aa.txt文件的內容
**

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

使用示例

public static void Main()
{
    // 定義文件流
    FileStream fileStream = new FileStream(@"D:\\c#workspace\\練習\\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() + " ");
    }
    //關閉流
    fileStream.Close();
    Console.ReadKey();
}

**輸出結果如下:
**

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()
{
    // 定義一個streamWriter寫一個文件
    string[] nameArray = { "張三", "李四", "王五" };
    // 使用using,用完后能自動關流
    using(StreamWriter sw=new StreamWriter(@"D:\\c#workspace\\練習\\aa.txt"))
    {
        foreach(string str in nameArray)
        {
            // 一次寫一行
            sw.WriteLine(str);
        }
    }




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


}

輸出結果

張三
李四
王五

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

復制圖片案例

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


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




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


}

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

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

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

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

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


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

    關注

    0

    文章

    26

    瀏覽量

    8615
  • i/o
    i/o
    +關注

    關注

    0

    文章

    33

    瀏覽量

    4704
  • 輸出設備
    +關注

    關注

    0

    文章

    12

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    I/O電路中電壓比較器與I/O信號完整性介紹

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

    物理約束實踐:I/O約束

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

    數(shù)字I/O介紹

    數(shù)字I/O腳有專用和復用。數(shù)字I/O腳的功能通過9個16位控制寄存器來控制。控制寄存器分為兩類:(1)I/
    發(fā)表于 09-16 12:20 ?19次下載

    冗余I/O

    6.1 冗余I/O的定義當I/O模塊以每兩個一組組態(tài)成冗余對運行時,I/O模板即認為是冗余配置。
    發(fā)表于 07-23 00:29 ?26次下載

    基于Rocket I/O模塊的高速I/O設計

    摘要: 介紹了采用Videx-ⅡPR0系列FPCA設計的應用于下一代無線通信系統(tǒng)中的高速IO。由于充分利用芯片中集成的Rocket IO模塊,并采用差分輸入?yún)⒖紩r鐘、
    發(fā)表于 06-20 10:45 ?1430次閱讀
    基于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>設計

    什么是I/O地址

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

    I/O擴展(8255)模塊

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

    Java I/O 的相關方法分析

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

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

    內容包括:理想的確定性以太網I/O,具有確定性分布式I/O的NI系統(tǒng),C系列的I/O模塊,與La
    的頭像 發(fā)表于 06-14 06:19 ?4841次閱讀
    介紹 <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模塊的價格占PLC價格的一半以上。PLC的IO模塊有開關量IO模塊、模擬量
    發(fā)表于 05-19 08:54 ?1w次閱讀
    PLC的<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊如何選擇

    關于標準I/O庫執(zhí)行I/O操作

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

    STM32單片機---I/O應用

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

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

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

    直接I/O

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

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

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