zoukankan      html  css  js  c++  java
  • 解决得到网络流不支持查找的方案

    解决思路:

    1. 将获取的网络流转化成内存流
    2. 内存流位置指向0     
    3. 内存流转化成字节流
    //获取fileNamePath路径的网络流
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileNamePath);
    WebResponse response = request.GetResponse();
    Stream stream = response.GetResponseStream();
    
    //将网络流写入内存流
    MemoryStream memoryStream = new MemoryStream();
    const int bufferLength = 1024;
    int actual;
    byte[] buffer = new byte[bufferLength];
    while ((actual = stream.Read(buffer, 0, bufferLength)) > 0)
    {
        memoryStream.Write(buffer, 0, actual);
    }
    memoryStream.Position = 0;
    
    //将内存流转成字节流
    byte[] bytes = new byte[memoryStream.Length];
    memoryStream.Read(bytes,0,bytes.Length);
    memoryStream.Seek(0,SeekOrigin.Begin);

    项目中进行代码的封装

            /// <summary>
            /// 返回字节流
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="url"></param>
            /// <param name="options"></param>
            /// <param name="param"></param>
            /// <param name="encoding"></param>
            /// <returns></returns>
            public static byte[] Post(string url, HttpOptions options, Dictionary<string, string> param, string encoding = "utf-8")
            {
                var req = CreateRequest(url, options);
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
    
                StringBuilder builder = new StringBuilder();
                foreach (var key in param.Keys)
                {
                    builder.Append(key).Append("=").Append(param[key]).Append("&");
                }
    
                if (builder.Length > 0)
                {
                    builder.Remove(builder.Length - 1, 1);
                }
    
                var arr = Encoding.GetEncoding(encoding).GetBytes(builder.ToString());
                req.ContentLength = arr.Length;
    
                using (var stream = req.GetRequestStream())
                {
                    stream.Write(arr, 0, arr.Length);
                    stream.Close();
    
                    using (var resp = GetResponse(req))
                    {
                        var sr = resp.GetResponseStream();
                        MemoryStream memoryStream = StreamToMemoryStream(sr);
                        return StreamToByte(memoryStream);
                    }
                }
            }
            public static HttpWebRequest CreateRequest(string uri, HttpOptions options)
            {
                var req = (HttpWebRequest)WebRequest.Create(uri);
                req.Timeout = options.TimeOut;
                req.Proxy = null;
                req.KeepAlive = false;
                req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87";
                return req;
            }
            public static HttpWebResponse GetResponse(HttpWebRequest request)
            {
                var res = (HttpWebResponse)request.GetResponse();
                return res;
            }
            /// <summary>
            /// 网络流转成内存流
            /// </summary>
            /// <param name="sr"></param>
            /// <returns></returns>
            public static MemoryStream StreamToMemoryStream(Stream stream)
            {
                MemoryStream memoryStream = new MemoryStream();
                const int bufferLength = 1024;
                byte[] buffer = new byte[bufferLength];
                int actual;
                while ((actual = stream.Read(buffer,0,bufferLength)) > 0)
                {
                    memoryStream.Write(buffer, 0, actual);
                }
                memoryStream.Position = 0;
                return memoryStream;
            }
            /// <summary>
            /// 内存流转成字节流
            /// </summary>
            /// <param name="sr"></param>
            /// <returns></returns>
            public static byte[] StreamToByte(Stream sr)
            {
                byte[] bytes = new byte[sr.Length];
                sr.Read(bytes, 0, bytes.Length);
                sr.Seek(0, SeekOrigin.Begin);
                return bytes;
            }        


    参考链接:https://blog.csdn.net/fengziyun/java/article/details/7414891

  • 相关阅读:
    性能调优之网络速度检测
    通过脚本自动下载Esri会议材料
    移动目标在三维GIS中的实现方法
    java生成CSV文件
    java 提取(解压)zip文件中特定后缀的文件并保存到指定目录
    java 提取(解压)rar文件中特定后缀的文件并保存到指定目录
    spring boot 使用 POI 读取Excel文件
    spring boot jpa 使用<S extends T> List<S> findAll(Example<S> example)查询数据
    一个MySQL中两表联合update的例子(并带有group by分组)
    Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)
  • 原文地址:https://www.cnblogs.com/youknowUL/p/12691888.html
Copyright © 2011-2022 走看看