如何用html读取数据流

HTML结合JavaScript,通过fetchXMLHttpRequest从服务器获取数据流,并

如何使用HTML读取数据流

如何用html读取数据流

在现代Web开发中,处理数据流是一个常见的需求,无论是从服务器获取实时数据、处理用户上传的文件,还是与WebSocket进行双向通信,掌握如何用HTML读取数据流都非常重要,本文将详细介绍如何在HTML中读取数据流,包括使用Fetch API、XMLHttpRequest、File API以及WebSocket等多种方法。

使用Fetch API读取数据流

Fetch API是现代浏览器中用于发起网络请求的接口,它返回一个Promise对象,可以方便地处理异步操作,虽然Fetch API主要用于处理静态资源,但也可以用于读取数据流。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">Fetch API 数据流</title>
</head>
<body>
    <script>
        fetch('https://example.com/data')
            .then(response => {
                // 检查响应状态
                if (!response.ok) {
                    throw new Error('Network response was not ok');
                }
                // 返回ReadableStream
                return response.body;
            })
            .then(stream => {
                const reader = stream.getReader();
                reader.read().then(function processText({ done, value }) {
                    if (done) {
                        console.log('Stream complete');
                        return;
                    }
                    console.log('Received chunk: ', value);
                    return reader.read().then(processText);
                });
            })
            .catch(error => console.error('Fetch error:', error));
    </script>
</body>
</html>

解释:

  1. fetch:发起网络请求。
  2. response.body:获取响应体的ReadableStream。
  3. stream.getReader():创建Reader对象来读取流。
  4. reader.read():读取流中的数据块,并在回调函数中处理数据。

使用XMLHttpRequest读取数据流

XMLHttpRequest是传统的HTTP请求方式,虽然不如Fetch API现代,但仍然广泛使用,通过设置onprogress事件,可以实时读取数据流。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">XMLHttpRequest 数据流</title>
</head>
<body>
    <script>
        const xhr = new XMLHttpRequest();
        xhr.open('GET', 'https://example.com/data');
        xhr.responseType = 'blob'; // 或 'arraybuffer'
        xhr.onprogress = function(event) {
            if (event.lengthComputable) {
                const percentComplete = (event.loaded / event.total)  100;
                console.log(`Progress: ${percentComplete}%`);
            }
        };
        xhr.onload = function() {
            if (xhr.status === 200) {
                console.log('Data loaded:', xhr.response);
            } else {
                console.error('Error loading data');
            }
        };
        xhr.send();
    </script>
</body>
</html>

解释:

  1. XMLHttpRequest:创建XHR对象。
  2. onprogress:监听进度事件,实时获取数据流的加载进度。
  3. onload:监听加载完成事件,处理最终的数据。

使用File API读取文件数据流

当用户上传文件时,可以使用File API读取文件的数据流,File API提供了多种方式来读取文件内容,如FileReader

如何用html读取数据流

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">File API 数据流</title>
</head>
<body>
    <input type="file" id="fileInput">
    <script>
        const fileInput = document.getElementById('fileInput');
        fileInput.addEventListener('change', function(event) {
            const file = event.target.files[0];
            const reader = new FileReader();
            reader.onload = function(e) {
                console.log('File content:', e.target.result);
            };
            reader.onerror = function(e) {
                console.error('Error reading file:', e);
            };
            reader.readAsText(file); // 或 readAsArrayBuffer, readAsDataURL
        });
    </script>
</body>
</html>

解释:

  1. FileReader:创建FileReader对象来读取文件。
  2. onload:监听文件读取完成事件,处理文件内容。
  3. onerror:监听读取错误事件,处理错误。

使用WebSocket读取实时数据流

WebSocket是一种双向通信协议,适用于需要实时数据传输的场景,通过WebSocket,客户端和服务器可以持续交换数据流。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">WebSocket 数据流</title>
</head>
<body>
    <script>
        const socket = new WebSocket('wss://example.com/socket');
        socket.onopen = function(event) {
            console.log('WebSocket connection established');
        };
        socket.onmessage = function(event) {
            console.log('Received message:', event.data);
        };
        socket.onclose = function(event) {
            console.log('WebSocket connection closed');
        };
        socket.onerror = function(error) {
            console.error('WebSocket error:', error);
        };
    </script>
</body>
</html>

解释:

  1. WebSocket:创建WebSocket对象并连接到服务器。
  2. onopen:监听连接建立事件。
  3. onmessage:监听消息接收事件,处理实时数据。
  4. onclose:监听连接关闭事件。
  5. onerror:监听错误事件,处理异常情况。

使用ReadableStream API处理自定义数据流

ReadableStream API允许开发者创建和操作自定义数据流,适用于需要手动控制数据流的场景。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">ReadableStream 数据流</title>
</head>
<body>
    <script>
        const { ReadableStream } = require('stream'); // 注意:在浏览器环境中不需要require
        const stream = new ReadableStream({
            start(controller) {
                controller.enqueue('Hello');
                controller.enqueue('World');
                controller.close();
            }
        });
        stream.addEventListener('data', (event) => {
            console.log('Received data:', event.data);
        });
        stream.addEventListener('end', () => {
            console.log('Stream ended');
        });
    </script>
</body>
</html>

解释:

  1. ReadableStream:创建可读流对象。
  2. start:定义流的起始行为,向流中添加数据。
  3. addEventListener:监听数据事件和结束事件,处理流中的数据。

使用MediaSource扩展API处理媒体数据流

MediaSource扩展API允许开发者将媒体数据流(如视频或音频)动态添加到HTML5 <video><audio>元素中,适用于需要处理实时媒体流的场景。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">MediaSource 数据流</title>
</head>
<body>
    <video id="video" controls></video>
    <script>
        const video = document.getElementById('video');
        const mediaSource = new MediaSource();
        video.src = URL.createObjectURL(mediaSource);
        mediaSource.addEventListener('sourceopen', function() {
            const sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');
            sourceBuffer.addEventListener('updateend', function() {
                if (!sourceBuffer.updating && mediaSource.readyState === 'open') {
                    sourceBuffer.appendBuffer(new Uint8Array([/ 二进制数据 /]));
                }
            });
        });
    </script>
</body>
</html>

解释:

  1. MediaSource:创建MediaSource对象。
  2. addSourceBuffer:添加源缓冲区,指定媒体格式。
  3. appendBuffer:向缓冲区追加媒体数据。
  4. updateend:监听缓冲区更新完成事件,继续追加数据。

使用Service Workers处理缓存数据流

Service Workers允许开发者拦截网络请求并处理缓存数据流,适用于离线应用或需要优化网络请求的场景。

如何用html读取数据流

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">Service Workers 数据流</title>
</head>
<body>
    <script>
        if ('serviceWorker' in navigator) {
            navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
                console.log('ServiceWorker registration successful with scope:', registration.scope);
            }, function(error) {
                console.error('ServiceWorker registration failed:', error);
            });
        }
    </script>
</body>
</html>

service-worker.js:

self.addEventListener('install', function(event) {
    event.waitUntil(caches.open('my-cache').then(function(cache) {
        return cache.addAll([
            '/',
            '/index.html',
            '/styles.css',
            '/script.js'
        ]);
    }));
});
self.addEventListener('fetch', function(event) {
    event.respondWith(caches.match(event.request).then(function(response) {
        return response || fetch(event.request);
    }));
});

解释:

  1. register:注册Service Worker。
  2. install:在安装阶段缓存资源。
  3. fetch:拦截网络请求,返回缓存资源或发起网络请求。

使用IndexedDB存储和读取大数据流

IndexedDB是浏览器提供的本地数据库,适用于存储和读取大量数据流,通过结合Dexie.js等库,可以更方便地操作IndexedDB。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">IndexedDB 数据流</title>
</head>
<body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/dexie/3.1.3/dexie.min.js"></script>
    <script>
        const db = new Dexie('myDatabase');
        db.version(1).stores({
            items: '++id, data'
        });
        db.items.put({ data: 'Sample data' }).then(function() {
            return db.items.toArray();
        }).then(function(items) {
            console.log('Stored items:', items);
        });
    </script>
</body>
</html>

解释:

  1. Dexie:引入Dexie.js库简化IndexedDB操作。
  2. version:定义数据库版本和存储结构。
  3. put:向数据库中添加数据。
  4. toArray:从数据库中读取所有数据。

使用Blob和URL.createObjectURL处理二进制数据流

Blob对象表示不可变的原始数据,常用于处理二进制数据流,结合URL.createObjectURL,可以将Blob数据转换为URL,供其他元素使用。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">Blob 数据流</title>
</head>
<body>
    <a id="downloadLink">Download</a>
    <script>
        const blob = new Blob(['Hello, world!'], { type: 'text/plain' });
        const url = URL.createObjectURL(blob);
        const downloadLink = document.getElementById('downloadLink');
        downloadLink.href = url;
        downloadLink.download = 'hello.txt';
    </script>
</body>
</html>

解释:

  1. Blob:创建Blob对象,包含原始数据。
  2. URL.createObjectURL:将Blob转换为URL。
  3. downloadLink:创建下载链接,指向Blob数据的URL。

使用Response对象处理Fetch API的响应流

Fetch API的Response对象本身就是一个ReadableStream,可以直接使用其body属性来读取数据流,这对于处理大文件或流式数据非常有用。

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">Response 数据流</title>
</head>
<body>
    <script>
        fetch('https://example.com/large-file')
            .then(response => {
                if (!response.ok) { throw new Error('Network response was not ok'); }
                return response.body;
            })
            .then(stream => {
                const reader = stream.getReader();
                reader.read().then(function processText({ done, value }) {
                    if (done) { console.log('Stream complete'); return; }
                    console.log('Received chunk:', value);
                    return reader.read().then(processText);
                });
            })
            .catch(error => console.error('Fetch error:', error));
    </script>
</body>
</html>

解释:

  1. fetch:发起网络请求。
  2. response.body:获取响应体的ReadableStream。
  3. stream.getReader():创建Reader对象来读取流。
  4. reader.read():读取流中的数据块,并在回调函数中处理数据。

FAQs相关问答解答部分:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法及适用场景详解FAQs:如何用HTML读取数据流?常见方法 &lt;—&

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/96553.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年8月7日 23:05
下一篇 2025年8月7日 23:16

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN