]> 127.0.0.1 Git - part/.git/commitdiff
ReadAll v0.10.15
authorqydysky <32743305+qydysky@users.noreply.github.com>
Wed, 19 Oct 2022 13:37:14 +0000 (21:37 +0800)
committerqydysky <32743305+qydysky@users.noreply.github.com>
Wed, 19 Oct 2022 13:37:14 +0000 (21:37 +0800)
file/FileWR.go
file/FileWR_test.go

index 1fc512c4610e62a3d7d798e22dddeef0fd16e7ae..8fc284c5a9f51004ab8f2b0083770d88f35e1442 100644 (file)
@@ -168,6 +168,42 @@ func (t *File) ReadUntil(separation byte, perReadSize int, maxReadSize int) (dat
        return
 }
 
+func (t *File) ReadAll(perReadSize int, maxReadSize int) (data []byte, e error) {
+       t.getRWCloser()
+       if t.Config.AutoClose {
+               defer t.Close()
+       }
+
+       if !t.TryRLock() {
+               return nil, ErrFailToLock
+       }
+       defer t.RUnlock()
+
+       var (
+               tmpArea = make([]byte, perReadSize)
+               n       = 0
+               reader  = t.read()
+       )
+
+       for maxReadSize > 0 {
+               n, e = reader.Read(tmpArea)
+
+               if n == 0 && e != nil {
+                       return
+               }
+
+               maxReadSize = maxReadSize - n
+
+               data = append(data, tmpArea[:n]...)
+       }
+
+       if maxReadSize <= 0 {
+               e = ErrMaxReadSizeReach
+       }
+
+       return
+}
+
 func (t *File) Seed(index int64) (e error) {
        t.getRWCloser()
        if t.Config.AutoClose {
@@ -311,33 +347,6 @@ func (t *File) newPath() error {
        return nil
 }
 
-// deprecated
-func transfer(r *File, w *File, byteInSec int64) (e error) {
-       if byteInSec > 0 {
-               limit := l.New(1, 1000, -1)
-               defer limit.Close()
-
-               reader := r.read()
-               writer := w.write()
-
-               buf := make([]byte, byteInSec)
-               for {
-                       n, err := reader.Read(buf)
-                       if n != 0 {
-                               writer.Write(buf[:n])
-                       } else if err != nil {
-                               e = err
-                               break
-                       }
-                       limit.TO()
-               }
-       } else {
-               _, e = io.Copy(w.write(), r.read())
-       }
-
-       return nil
-}
-
 func transferIO(r io.Reader, w io.Writer, byteInSec int64) (e error) {
        if byteInSec > 0 {
                limit := l.New(1, 1000, -1)
index 430efd9a508bfeb29d31cd491c7f762d33ecbc21..63b9c57e0f6bc946556622ea662176fe8f936179 100644 (file)
@@ -191,3 +191,16 @@ func TestEncoderDecoder(t *testing.T) {
        sf.Delete()
        tf.Delete()
 }
+
+func TestReadAll(t *testing.T) {
+       sf := New("t.txt", 0, true)
+       defer sf.Delete()
+
+       if i, e := sf.Write([]byte("测1试s啊是3大家看s法$和"), true); i == 0 || e != nil {
+               t.Fatal(e)
+       }
+
+       if data, e := sf.ReadAll(10, 1000); (e != nil && !errors.Is(e, io.EOF)) || !bytes.Equal(data, []byte("测1试s啊是3大家看s法$和")) {
+               t.Fatal(e, string(data))
+       }
+}