主頁 > 後端開發 > 樹莓派OLED模塊的使用教程大量例程詳解

樹莓派OLED模塊的使用教程大量例程詳解

2021-09-18 08:04:56 後端開發

簡介

Python有兩個可以用的OLED庫

  • [Adafruit_Python_SSD1306庫]—>只支持SSD1306

  • [Luma.oled庫]—>支持SSD1306 / SSD1309 / SSD1322 / SSD1325 / SSD1327 / SSD1331 / SSD1351 / SSD1362 / SH1106 / WS0010驅動芯片
    通過本篇教程,你可以學習樹莓派環境下I2C介面OLED基礎功能的使用,以及獲取到復雜功能的Demo例程,

    故事背景

    時常有看到網路上有一些OLED做的智能小時鐘,非常漂亮,OLED作為一款自發光、低功耗、低成本的螢屏,非常受大家的喜愛,因此我也比較好奇,研究了一下OLED的使用,說干就干,那我們就開始吧!

    硬體準備

  • 樹莓派主機(3B/3B+ 、 4B等,提前安裝好系統)

  • HDMI顯示屏(推薦直接使用VNC或SSH工具遠程登錄,則可以少準備一個顯示屏)

  • 無線鍵鼠一套(有線也可以,遠程訪問則可以不用)

  • 路由器

  • Windows主機

  • I2C介面的OLED螢屏
    給今天的主角OLED亮個像吧:
    在這里插入圖片描述

    軟體準備

  1. 啟動樹莓派I2C功能

  2. OLED的驅動庫的選擇
    Python有兩個可以用的OLED庫

  • [Adafruit_Python_SSD1306庫]—>只支持SSD1306
  • [Luma.oled庫]—>支持SSD1306 / SSD1309 / SSD1322 / SSD1325 / SSD1327 / SSD1331 / SSD1351 / SSD1362 / SH1106 / WS0010驅動芯片
    在這里我們應該怎么選擇呢?先說結論:我比較推薦Luma.oled這個庫,下面分析對比一下兩個庫的優缺點:
優點 缺點
Adafruit 上手簡單 例程少,功能弱,只支持一種芯片
Luma.oled 例程豐富,功能強大,支持芯片豐富 上手難度稍大

這里順便貼出Luma和Adafruit庫的鏈接:
luma庫使用基本官方介紹網頁
luma的例程代碼git倉庫地址
Luma官方示例代碼截圖
在這里插入圖片描述

Adafruit-SSD1306示例代碼git倉庫地址
示例代碼目錄如下
在這里插入圖片描述

從示例代碼截圖也可以看到Adafruit的例程確實很少

  1. Luma.oled驅動庫的安裝
    Luma.oled是基于 Python 的OLED 庫,所以要用pip來安裝,現在比較流行python3,所以推薦用pip3,輸入指令

    sudo pip3 install luma.oled
    
    • python2 安裝只需要將pip3換成pip即可
    • Adafruit的安裝指令為:sudo pip3 install Adafruit-SSD1306
      [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7p3KdxSL-1631859093083)(index_files/04ecc9f6-9e43-4abc-a966-78822de0a1e4.png)]
      如果安裝失敗,注意檢查pip工具是否需要更新,注意檢查網路是否通暢

    硬體連接

    1. 參考樹莓派引腳圖
      在這里插入圖片描述

    這個圖比較詳細,也比較復雜了,我們暫時只需要關注表格中間功能名物理引腳功能名這三列,找到1--3.3v,3--SDA.1,5--SCL.1,6--GND這四個引腳

    1. 參考OLED模塊的引腳圖

    在這里插入圖片描述

    引腳編號 功能 功能說明
    1 GND 電源地線,電源負極
    2 VCC 電源正極,大部分OLED模塊3.3v即可驅動
    3 SCL I2C時鐘線
    4 SDA I2C資料線
    1. 使用雙母頭杜邦線按照上述引腳圖Pin-to-Pin連接即可,連接好后樹莓派的引腳分布為L形狀,接線示意圖如下
      在這里插入圖片描述

    千萬注意電源正負極別接反了,容易燒板子

    知識儲備

    以下知識不在本教程詳細討論范圍,但還是列舉出來,有興趣的可以網上找找資料深入學習

    1. OLED顯示原理,驅動原理(嵌入式內容),推薦這篇博客進行了解OLED顯示模塊(原理講解、STM32實體操作)_玩轉智能機器人-CSDN博客
    2. I2C通信原理,I2C總線特點

例程一:使用OLED顯示“Hello,World”

編代碼先從Hello,World開始,有了一,就有了無限可能,步驟如下:

  1. 根據前文的步驟連接好OLED模塊,查找oled的I2C地址,每個OLED模塊的I2C地址不一定都相同,需要先查找獲取地址,同時也檢查一下OLED模塊是否連接正常,
    輸入指令:
sudo i2cdetect -y 1

在這里插入圖片描述

如圖所示3c就是OLED模塊的I2C地址

  1. 運行如下代碼即可
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from luma.core.interface.serial import i2c, spi
from luma.core.render import canvas
from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106
from time import sleep
"""
OLED luma 驅動庫測驗程式
功能:顯示 hello world 和矩形外框持續10秒
"""
__version__ = 1.0
# 初始化埠
serial = i2c(port=1, address=0x3C)
# 初始化設備,這里改ssd1306, ssd1325, ssd1331, sh1106
device = ssd1306(serial)
print("當前版本:", __version__)
# 呼叫顯示函式
with canvas(device) as draw:
 draw.rectangle(device.bounding_box, outline="white", fill="black")
 draw.text((30, 20), "Hello World", fill="white")
# 延時顯示10s
sleep(10)

此代碼會在Oled螢屏上畫出一個矩形邊框,并在內部顯示Hello,World,10s后關閉,效果如下圖:
在這里插入圖片描述

  1. 代碼決議

    # 初始化設備,這里改ssd1306, ssd1325, ssd1331, sh1106
    device = ssd1306(serial)
    

    這段代碼主要作用是初始化設備

    • 如果OLED的驅動芯片不是ssd1306,這里需要更換對應的函式名
    • 如果OLED尺寸不同,則需要傳不同引數,例如如果是0.91寸的128*32的OLED則代碼應修改為:device = ssd1306(serial, width=128, height=32)
    # 呼叫顯示函式
    with canvas(device) as draw:
        draw.rectangle(device.bounding_box, outline="white", fill="black")
        draw.text((30, 20), "Hello World", fill="white")
    
    • canvas 英文單詞含義為畫布,意思就是可以在這里輸入各種需要顯示的內容
    • 這段代碼使用了with...as...:語法,關于with的詳細用法可以暫且不論,這里可以簡單理解為先執行canvas函式,然后將回傳物件賦值給draw變數,用此語法創建的物件,會在使用結束后自動釋放資源,常用于打開某個檔案,之后自動關閉檔案,舉例如下:
    # 打開1.txt檔案,并列印輸出檔案內容
    with open('1.txt', 'r') as f:
        print(f.read())
    
    • draw.rectangle() 為畫矩形的函式,類似的還有畫圓,畫三角形

例程二:顯示漢字

  1. 代碼如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from luma.core.interface.serial import i2c, spi
from luma.core.render import canvas
from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106
from time import sleep
from PIL import ImageFont
"""
OLED luma 驅動庫測驗程式
功能:顯示 漢字古詩持續10秒
"""
__version__ = 1.0
# 初始化埠
serial = i2c(port=1, address=0x3C)
# 初始化設備,這里改ssd1306, ssd1325, ssd1331, sh1106
device = ssd1306(serial)
print("當前版本:", __version__)
font = ImageFont.truetype('./msyh.ttc', 12)
# 呼叫顯示函式
with canvas(device) as draw:
 draw.rectangle(device.bounding_box, outline="white", fill="black")
 draw.text((5, 10), "古詩一首", fill="white", font=font)
 draw.text((5, 24), "白日依山盡,", fill="white", font=font)
 draw.text((5, 38), "黃河入海流,", fill="white", font=font)
# 延時顯示10s
sleep(10)
  1. 顯示效果如下
    圖片名稱

  2. 代碼決議

  • from PIL import ImageFont 這個是強大的PIL庫中的字體類,顯示漢字,默認字體就不行了,所以需要新增字體檔案
  • font = ImageFont.truetype('./msyh.ttc', 12) 這段代碼含義是呼叫當前目錄下的字體檔案 "msyh.ttc"創建一個字體類,"msyh.ttc"是微軟雅黑字體,可以百度一下自行下載,我也是在盜版網站上扒到的,此處就不貼鏈接了,
  • draw.text((5, 10), "古詩一首", fill="white", font=font) 這段代碼跟上一個示例相比,就是多了一個字體賦值,含義是在(5,10)的位置顯示漢字,

例程三:畫幾何圖形

1.代碼如下:

  #!/usr/bin/python3
  # -*- coding: utf-8 -*-
  from luma.core.interface.serial import i2c, spi
  from luma.core.render import canvas
  from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106
  from time import sleep
  from PIL import ImageFont
  """
  OLED luma 驅動庫測驗程式
  功能:顯示 幾何圖形 持續10秒
  """
  __version__ = 1.0
  # 初始化埠
  serial = i2c(port=1, address=0x3C)
  # 初始化設備,這里改ssd1306, ssd1325, ssd1331, sh1106
  device = ssd1306(serial)
  print("當前版本:", __version__)
  font = ImageFont.truetype('./msyh.ttc', 12)
  # 呼叫顯示函式
  with canvas(device) as draw:
  draw.rectangle(device.bounding_box, outline="white", fill="black")
  # Draw an ellipse.
  draw.ellipse((2, 2, 20, 60), outline="white", fill="black")
  # Draw a rectangle.
  draw.rectangle((24, 2, 42, 60), outline="blue", fill="black")
  # Draw a triangle.
  draw.polygon([(44, 60), (54, 2), (64, 60)], outline="green", fill="black")
  # Draw an X.
  draw.line((66, 60, 86, 2), fill="yellow")
  draw.line((66, 2, 86, 60), fill="yellow")
  # 延時顯示10s
  sleep(10)

2.顯示效果如下:
圖片名稱

  1. 代碼決議

    # Draw an ellipse.
        draw.ellipse((2, 2, 20, 60), outline="white", fill="black")
    

    繪制橢圓,傳入第一個引數為橢圓外接矩形的對角坐標,outline引數為幾何圖形邊線的顏色,fill 為幾何圖形內部填充的顏色

    # Draw a rectangle.
        draw.rectangle((24, 2, 42, 60), outline="blue", fill="black")
    

    繪制矩形,傳入第一個引數為矩形的對角坐標,outline引數為幾何圖形邊線的顏色,fill 為幾何圖形內部填充的顏色

    # Draw a triangle.
        draw.polygon([(44, 60), (54, 2), (64, 60)], outline="green", fill="black")
    

    繪制三角形,此處呼叫了繪制多半形的函式,傳入第一個引數為三角形三個頂點的坐標,outline引數為幾何圖形邊線的顏色,fill 為幾何圖形內部填充的顏色

    # Draw an X.
        draw.line((66, 60, 86, 2), fill="yellow")
        draw.line((66, 2, 86, 60), fill="yellow")
    

    繪制一個"X"形狀的交叉線

    此處呼叫了劃線函式,傳入第一個引數為線的兩個端點坐標,fill 為線的顏色


例程四:滾動顯示

  1. 代碼如下:

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    from luma.core.interface.serial import i2c, spi
    from luma.core.render import canvas
    from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106
    from luma.core.virtual import viewport
    from time import sleep
    from PIL import ImageFont
    
    """
    OLED luma 驅動庫測驗程式
    功能:顯示 漢字古詩持續10秒
    """
    
    __version__ = 1.0
    
    # 初始化埠
    serial = i2c(port=1, address=0x3C)
    
    # 初始化設備,這里改ssd1306, ssd1325, ssd1331, sh1106
    device = ssd1306(serial)
    
    
    font = ImageFont.truetype('./msyh.ttc', 12)
    
    txt = """
    將進酒
    李白
    君不見黃河之水天上來,
    奔流到海不復回,
    君不見高堂明鏡悲白發,
    朝如青絲暮成雪,
    人生得意須盡歡,
    莫使金樽空對月,
    天生我材必有用,
    千金散盡還復來,
    
    """
    
    txt2 = """將進酒
    李白
    君不見黃河之水天上來,奔流到海不復回,君不見高堂明鏡悲白發,朝如青絲暮成雪,
    人生得意須盡歡,莫使金樽空對月,天生我材必有用,千金散盡還復來,
    """ 
    
    
    virtual = viewport(device, width=500, height=768)
    
    def horizontal_scroll():
        with canvas(virtual) as draw:
            for i, line in enumerate(txt2.split("\n")):
                draw.text((0, (i * 16)), text=line, fill="white", font=font)
    
        sleep(2)
    
        # update the viewport one position below, causing a refresh,
        # giving a rolling up scroll effect when done repeatedly
        y = 0
        for x in range(240):
            virtual.set_position((x, y))
            sleep(0.01)
    
    def vertical_scroll():
        with canvas(virtual) as draw:
            for i, line in enumerate(txt.split("\n")):
                draw.text((0, 20 + (i * 16)), text=line, fill="white", font=font)
    
        sleep(2)
    
        # update the viewport one position below, causing a refresh,
        # giving a rolling up scroll effect when done repeatedly
        x = 0
        for y in range(240):
            virtual.set_position((x, y))
            sleep(0.01)
    
    
    def main():
        print("當前版本:", __version__)
        horizontal_scroll()
        vertical_scroll()
    
    
    if __name__ == "__main__":
        try:
            main()
        except KeyboardInterrupt:
            pass
    
    
    
  2. 顯示效果如下(動圖):
    水平滾動:
    在這里插入圖片描述
    垂直滾動:
    在這里插入圖片描述

  3. 代碼決議

    • virtual = viewport(device, width=500, height=768) 這段代碼創建了一個虛擬畫布,viewport 類支持創建一個可以改變定位的虛擬畫布,而且可以創建比實際解析度更大的畫布,再通過重新定位的方式來進行一個滾動顯示,理解這一點對后面的代碼理解很有幫助,
    • def horizontal_scroll():
          with canvas(virtual) as draw:
              for i, line in enumerate(txt2.split("\n")):
                  draw.text((0, (i * 16)), text=line, fill="white", font=font)
          sleep(2)
          # update the viewport one position below, causing a refresh,
          # giving a rolling up scroll effect when done repeatedly
          y = 0
          for x in range(240):
              virtual.set_position((x, y))
              sleep(0.01)
      
    • 這段代碼,是水平滾動代碼,首先用with...as...語法創建并更新顯示畫布,超出解析度的內容沒有被顯示,然后for x in range(240):這個回圈不斷改變畫布的原點x坐標的位置,以實作水平滾動,
    • 垂直滾動原理類似,先顯示,后改變原點y軸的坐標,以此實作垂直滾動

更多示例

  1. 介紹到這里,OLED的基本使用就已經入門了,想研究其他更多的示例,可以直接參考官方的例程

傳送陣在這里: luma的例程代碼git倉庫地址

  1. 恭喜你! 又get一個外設模塊!

歡迎各位老鐵一鍵三連,本號后續會不斷更新樹莓派、人工智能、STM32、ROS小車相關文章和知識,

大家對感興趣的知識點可以在文章下面留言,我可以優先幫大家講解哦

原創不易,轉載請說明出處,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/300895.html

標籤:其他

上一篇:Spring Boot + Redis 實作各種操作,寫得太好了吧!

下一篇:Java 客戶資訊管理軟體 (面向物件 封裝 總結)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more