zoukankan      html  css  js  c++  java
  • 单线程读文件

    代码
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;
    using System.IO;

    namespace ExToDB.FileTransfer
    {
        
    public class FileComsumer
        {
            
    private string fileName;
            
    private Stream streamOuput = null;
            
    private int bufferSize = 1024;

            
    private Thread fileThread = null;
            
    private volatile bool isStop;

            
    public event ReturnEndEvent OnReadEnd;

            
    public FileComsumer(string fileName)
            {
                isStop 
    = false;
                
    this.fileName = fileName;
            }

            
    /// <summary>
            
    /// 获取读到的Stream
            
    /// </summary>
            public Stream StreamOuput
            {
                
    get { return streamOuput; }
            }

            
    public void Start()
            {
                fileThread 
    = new Thread(new ThreadStart(TheadReadFile));
                fileThread.Start();
            }

            
    public void Stop()
            {
                isStop 
    = true;
                
    if (fileThread != null && fileThread.ThreadState == System.Threading.ThreadState.Running)
                    fileThread.Abort();
                fileThread 
    = null;
            }

            
    private byte[] buffer = null;

            
    /// <summary>
            
    /// 获取读到的数据
            
    /// </summary>
            public byte[] Buffer
            {
                
    get { return buffer; }
            }

            
    private void TheadReadFile()
            {
                streamOuput 
    = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, true);
                
    int numBytesToRead = (int)streamOuput.Length;
                
    int numBytesRead = 0;
                buffer 
    = new byte[streamOuput.Length];
                
    while (numBytesToRead > 0 && !isStop)
                {
                    
    // Read may return anything from 0 to numBytesToRead.
                    int n = streamOuput.Read(buffer, numBytesRead, numBytesToRead);
                    
    // The end of the file is reached.
                    if (n == 0)
                    {
                        OnOnReadEnd();
                        
    break;
                    }
                        numBytesRead 
    += n;
                    numBytesToRead 
    -= n;
                    
    //读取文件完成,触发事件
                    if (numBytesToRead == 0)
                        OnOnReadEnd();
                }
                streamOuput.Close();
            }

            
    private void OnOnReadEnd()
            {
                
    if(this.OnReadEnd!=null)
                    OnReadEnd(
    this,new ReturnEndReadEventargs(true));
            }
        }
    }
  • 相关阅读:
    【LeetCode】048. Rotate Image
    【LeetCode】036. Valid Sudoku
    【LeetCode】060. Permutation Sequence
    【LeetCode】001. Two Sum
    【LeetCode】128. Longest Consecutive Sequence
    【LeetCode】081. Search in Rotated Sorted Array II
    【LeetCode】033. Search in Rotated Sorted Array
    顺时针打印矩阵
    矩形覆盖
    二维数组中的查找
  • 原文地址:https://www.cnblogs.com/csharponworking/p/1644490.html
Copyright © 2011-2022 走看看