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));
            }
        }
    }
  • 相关阅读:
    洛谷P1339 [USACO09OCT]热浪Heat Wave 题解
    洛谷P2692 覆盖 题解
    ELK logstash geoip值为空故障排查
    Linux_LVM_磁盘扩容
    通过zabbix的API接口获取服务器列表
    linux下安装部署ansible
    nginx 错误502 upstream sent too big header while reading response header from upstream
    docker报Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.19)
    Python学习之MySQLdb模块
    Nginx模块 ngx_http_limit_req_module 限制请求速率
  • 原文地址:https://www.cnblogs.com/csharponworking/p/1644490.html
Copyright © 2011-2022 走看看