2012-12-01 23 views
17

में बफर्ड रीडर से बाइट्स की विशिष्ट संख्या पढ़ना मुझे bufio पैकेज से गोलांग में विशिष्ट फ़ंक्शन के बारे में पता है।गोलांग

func (b *Reader) Peek(n int) ([]byte, error) 

पीक अगले n बाइट्स रिटर्न पाठक को आगे बढ़ाने के बिना। बाइट्स अगले पढ़ने के कॉल पर मान्य होना बंद करें। यदि पीईसी बाइट्स से कम लौटाता है, तो यह भी एक त्रुटि देता है कि पढ़ना क्यों छोटा है। त्रुटि ErrBufferFull है यदि n बी के बफर आकार से बड़ा है।

मैं एक रीडर से बाइट्स की एक विशिष्ट संख्या को पढ़ने के लिए है कि पाठक आगे बढ़ाएंगे में सक्षम होना चाहिए। असल में, ऊपर दिए गए फ़ंक्शन के समान, लेकिन यह पाठक को आगे बढ़ाता है। क्या कोई यह जानता है कि इसे कैसे पूरा किया जाए?

उत्तर

22
func (b *Reader) Read(p []byte) (n int, err error) 

http://golang.org/pkg/bufio/#Reader.Read

बाइट की संख्या पढ़ने के लिए len(p)

+7

यह नहीं 'हमेशा' बाइट्स की एक विशिष्ट संख्या है, हालांकि पढ़ा जाएगा, यह केवल सीमित कर देगा हो सकता है बाइट को पढ़ने के लिए बाइट (पी)। – dustinevan

3

पाठक को एक एन-बाइट आकार के बफर पास करें।

47

नोट सीमित हो जाएगा कि bufio.Read प्रणाली को बुलाती है पर अंतर्निहित io.Read सबसे एक बार, जिसका अर्थ है कि यह n < len(p) लौट सकते हैं, EOF तक पहुंचे बिना। आप बिल्कुल len(p) बाइट्स पढ़ने के लिए या एक त्रुटि के साथ विफल करना चाहते हैं, तो आप io.ReadFull इस तरह उपयोग कर सकते हैं:

n, err := io.ReadFull(reader, p) 

यह काम करता है, भले ही पाठक बफ़र कर रहा है।

3

मैं पढ़ें() खासकर यदि आप फ़ाइलों के किसी भी प्रकार के पढ़ने के लिए जा रहे हैं और यह मात्रा में डाटा भेजने में भी उपयोगी हो सकता है, नीचे दिखाने के लिए कि यह कैसे किया जाता है एक उदाहरण है पसंद की हूँ

fs, err := os.Open("fileName"); 

if err != nil{ 
    fmt.Println("error reading file") 
    return 
} 

defer fs.Close() 

reader := bufio.NewReader(fs) 

buf := make([]byte, 1024) 

for{ 
    v, _ := reader.Read(buf) //ReadString and ReadLine() also applicable or alternative 

    if v == 0{ 
     return 
    } 
    //in case it is a string file, you could check its content here... 
    fmt.Print(string(buf)) 
} 
0

ऐसा करने के लिए आप सिर्फ

n := 512 
buff := make([]byte, n) 
fs.Read(buff) // fs is your reader. Can be like this fs, _ := os.Open('file') 

func (b *Reader) Read(p []byte) (n int, err error)

के साथ इस टुकड़ा में एक बाइट टुकड़ा और read डेटा बनाने की जरूरत

पढ़ें पी में डेटा पढ़ता है। यह पी में पढ़ने बाइट्स की संख्या देता है। बाइट्स, इसलिए अंतर्निहित रीडर पर से अधिकतम एक बार पढ़ें लिया जाता है n कम से कम लेन (पी)

संबंधित मुद्दे