黑马程序员技术交流社区

标题: TCP + IO 问题 [打印本页]

作者: 杜光    时间: 2013-6-14 13:57
标题: TCP + IO 问题
  1. import java.io.*;
  2. import java.net.*;

  3. class TcpClient
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 Socket s = new Socket("192.168.31.171",10007);
  8.                
  9.                 BufferedInputStream bis =
  10.                         new BufferedInputStream(new FileInputStream("1.jpg"));
  11.                
  12.                 OutputStream out = s.getOutputStream();

  13.                 byte[] buf = new byte[1024];

  14.                 int len = 0;

  15.                 while ((len=bis.read(buf))!=-1)
  16.                 {
  17.                         out.write(buf,0,len);
  18.                 }
  19.                
  20.                 s.shutdownOutput();


  21.                 BufferedReader bufIn =
  22.                         new BufferedReader(new InputStreamReader(s.getInputStream()));

  23.                 System.out.println(new String(bufIn.readLine()));

  24.                 bis.close();
  25.                 s.close();


  26.         }
  27. }

  28. /*
  29. 服务端:


  30. */

  31. class  TcpServer
  32. {
  33.         public static void main(String[] args) throws Exception
  34.         {
  35.                 ServerSocket ss = new ServerSocket(10007);

  36.                 Socket s = ss.accept();

  37.                 InputStream fis = s.getInputStream();

  38.                 FileOutputStream out = new FileOutputStream("Server.jpg");

  39.                 byte[] by = new byte[1024];
  40.                 int len = 0;

  41.                 while((len=fis.read(by))!=-1)
  42.                 {
  43.                         out.write(by,0,len);
  44.                 }

  45.                
  46.                 PrintWriter pw2 = new PrintWriter(s.getOutputStream(),true);
  47.                 pw2.println("上传成功");

  48.                 out.close();
  49.                 s.close();
  50.                 ss.close();


  51.         }
  52. }
复制代码
OutputStream out = s.getOutputStream();
上面这行写成下面为什么报错,说不兼容类型?求解
FileOutputStream out = s.getOutputStream();
作者: 刘勇强    时间: 2013-6-14 14:10
本帖最后由 刘勇强 于 2013-6-14 14:11 编辑

Socket类的getOutputStream()方法的返回值是OutputStream类型的,你赋给他的子类FileOutputStream 当然就不兼容了比如狗 猫是动物的子类 取得一个动物对象,你把他赋给狗或猫 类型转换异常吧

作者: ′х.|鰉❤耔    时间: 2013-6-14 14:22
你还是查看一下API吧~·看看它的类型吧~·
作者: 704050a    时间: 2013-6-14 15:26
s.getOutputStream();返回的是OuputStream,FileOutputStream  是它的子类,不能把父类赋给一个子类对象,只能运用多态,将子类对象的引用赋给父类对象。
作者: 704050a    时间: 2013-6-14 15:26
s.getOutputStream();返回的是OuputStream,FileOutputStream  是它的子类,不能把父类赋给一个子类对象,只能运用多态,将子类对象的引用赋给父类对象。
作者: peerless2012    时间: 2013-6-14 16:43
参看jdk
public class FileOutputStream extends OutputStream
文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
FileOutputStream继承自OutputStream




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2