2010-04-18 98 views

回答

4
func Read(b []byte) (n int, err os.Error) 

Read是一個輔助函數調用Reader.ReadReader定義爲:var Reader io.Reader

crypto/rand/

io.Reader是一個封裝的基本Read方法的接口。

Read最多可將len(p)字節轉換爲p。它返回讀取的字節數(0 <= n <= len(p))和遇到的任何錯誤。即使Read返回n < len(p),它也可以在呼叫期間使用全部p作爲暫存空間。如果某些數據可用但不是len(p)字節,則Read通常會返回可用的數據,而不是等待更多數據。

在輸入流結束時,Read返回0, os.EOFRead可能會返回一個不爲零的字節數與一個非nil錯誤。特別是,耗盡輸入的Read可能會返回n>0, os.EOF

type Reader interface { 
    Read(p []byte) (n int, err os.Error) 
} 

io/#Reader

例如,要讀取的第一個16個隨機字節,

package main 

import (
    "fmt" 
    "crypto/rand" 
) 

func main() { 
    b := make([]byte, 16) 
    n, err := rand.Read(b) 
    fmt.Println(n, err, b) 
} 

使用包init()功能,crypto/rand默認使用/dev/urandom

// Easy implementation: read from /dev/urandom. 
// This is sufficient on Linux, OS X, and FreeBSD. 
func init() { Reader = &devReader{name: "/dev/urandom"} } 

crypto/rand/rand.go

+0

您可以訪問到*的/ dev/urandom的*,因爲它已被定義於'的init()',而不是'newReader'(使用*的/ dev /隨機*),因爲它是未導出的。 – user316368 2010-04-18 22:48:47

+1

由於未導出newReader和devReader,因此始終使用/ dev/urandom。 – peterSO 2010-04-19 02:28:44