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 搜索旋转排序数组(二分法)
    每天一道leetcode 统计重复个数(循环节)
    python3 简单web目录扫描脚本(后续更新完整)
    每天一道leetcode 盛最多水的容器 (双指针)
    python3 语法学习 类和继承
    python3 语法学习 文件操作及os方法
    python3 语法学习 输入输出美观
    TCP/IP 协议:IP 协议
    TCP/IP 协议:链路层概述
    Http权威指南(二)---读书笔记
  • 原文地址:https://www.cnblogs.com/csharponworking/p/1644490.html
Copyright © 2011-2022 走看看