소켓을 통한 파일 전송: 데이터 교환 문제 해결
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!