> Java > java지도 시간 > 소켓을 통한 파일 전송으로 인해 빈 파일이 생성되는 이유는 무엇입니까?

소켓을 통한 파일 전송으로 인해 빈 파일이 생성되는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-09 18:20:02
원래의
961명이 탐색했습니다.

Why does my file transfer over sockets result in an empty file?

소켓을 통한 파일 전송: 데이터 교환 문제 해결

Java 프로그래밍에서 소켓을 통해 파일을 바이트 배열로 보내고 받는 데 문제가 발생할 수 있습니다. 이 가이드는 클라이언트와 서버 간 데이터 전송 과정에서 빈 파일 생성을 관찰한 개발자가 직면한 문제를 해결하는 것을 목표로 합니다.

서버 구성

서버의 작업 클라이언트로부터 데이터를 받는 것입니다. 다음 코드 조각은 서버의 기능을 간략하게 설명합니다.

<code class="java">byte[] bytes = new byte[1024];

in.read(bytes);
System.out.println(bytes);

FileOutputStream fos = new FileOutputStream("C:\test2.xml");
fos.write(bytes);</code>
로그인 후 복사

문제는 fos.write(bytes) 행에서 발생합니다. 여기서 bytes 배열에 불완전한 데이터가 포함되어 있습니다. 이는 in.read(bytes)가 배열로 데이터의 일부만 읽어오기 때문입니다.

클라이언트 구성

클라이언트의 임무는 데이터를 서버로 보내는 것입니다. . 그러나 다음 코드 발췌에는 불완전한 작업이 포함되어 있습니다.

<code class="java">//out.write(bytes);
System.out.println(bytes);</code>
로그인 후 복사

out.write(bytes) 행이 주석 처리되어 바이트 배열의 데이터가 서버에 기록되지 않습니다. 결과적으로 서버는 빈 배열을 수신하여 빈 파일이 생성됩니다.

해결 방법

이 문제를 해결하려면 스트림을 Java는 버퍼를 활용하고 더 이상 읽을 데이터가 없을 때까지 버퍼에 데이터를 지속적으로 읽어들이는 것입니다. 다음 코드 조각은 이 접근 방식을 보여줍니다.

<code class="java">byte[] buffer = new byte[8192];
while ((count = in.read(buffer)) > 0) {
  out.write(buffer, 0, count);
}</code>
로그인 후 복사

위 내용은 소켓을 통한 파일 전송으로 인해 빈 파일이 생성되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿