黑马程序员技术交流社区

标题: 视频中的代码,求解释! [打印本页]

作者: 杜佳瑞    时间: 2012-8-14 15:00
标题: 视频中的代码,求解释!


今天看了服务器上传文件的例子,听完有几个问题,希望大家帮我解答一下。上面是我将视频中截图组织起来的整个程序。
下面的DOS图片还有个问题,在之前的视频中从来没有见过老师这样运行程序,难道这样就能将 c:\1.jpg这个对象传入PicClient这个类的主函数中吗?求解释。先谢过了

作者: 郑彬    时间: 2012-8-14 17:17
public static void main(String[] args)
main方法的参数数组args主要作用是用于调试程序的,可以在运行时动态的给程序传递字符数组参数。
1、例子,命令行中输入(命令行中输入的都是字符哦):
        java Test aaa,bbb
则args[0]="aaa";args[1]="bbb";

例子,命令行中输入:java TestDemo "hello java" haha
则args[0]="hello java";args[1]="haha";

如果什么都不输,则默认传入的args为数组长度为0的字符串数组。参考以下代码。
public static void main1(String[] args){
            
                System.out.println(args.length);
            
}
String[] a=new String[]{};
                main1(a);
                System.out.println(a);

OutputStream out=s.getOutPutStream();
没有用到BufferedOutputStream的功能,如果用到这个功能则要去刷新flush(),因为不刷新不会存到文件中,只在内存中。没有到这个的话不刷新也会自动的存到文件中的,刷新只是强制存到文件中。没刷新也会在存的哦,只不过不是一写就存,而是写到一定的时候再存,这样提高写入提高效率。

下面的DOS图片还有个问题,在之前的视频中从来没有见过老师这样运行程序,难道这样就能将 c:\1.jpg这个对象传入PicClient这个类的主函数中吗?求解释。先谢过了


控制台上输入的c:\1.jpg是一个字符串,会作为参数传递给main(String[] args)函数。因为输入的是一个字符串,所以系统自动变为String[] args=new String[]{"c:\1.jpg"};所以传入的是一个数组长度为1的字符串数组参数。

作者: 毛标    时间: 2012-8-14 17:29
本帖最后由 毛标 于 2012-8-14 17:54 编辑

今天刚好看完这个视屏,我自己的理解就是那4个IF判断语句应该就是在服务端准备接收数据的时候先进行1个判断,也就是限制客户端,这样来保证接受到的图片不会存在那4个IF语句中的情况这样来保证接收的准确性。2;那个shutdownOutput应该是就可以直接处理问题了吧。
javac是吧保存的文件编成.class文件java是运行包含主函数的,这2个可以分别用java来运行java PicServer和java PicClient
我也是新手~有大虾详细解释更好!谢谢
作者: 杜佳瑞    时间: 2012-8-14 17:52
郑彬 发表于 2012-8-14 17:17
public static void main(String[] args)
main方法的参数数组args主要作用是用于调试程序的,可以在运行时 ...

你的意思是OutPutStream不用刷新也能保存到文件中吗?可是我的印象中只有PrintWrite可以不用刷新啊
作者: 郑彬    时间: 2012-8-15 14:12
杜佳瑞 发表于 2012-8-14 17:52
你的意思是OutPutStream不用刷新也能保存到文件中吗?可是我的印象中只有PrintWrite可以不用刷新啊 ...

flush();方法是把内存中的数据冲出来适用于bufferedoutputstream如果没有这个方法就不能读出数据

PrintWrite相对于字符串写入流可以不用刷新,字符流刷新是因为在底层调用了字节流,然后将其存入一个数组,因为内部封装了缓冲,所以字符流需要刷新。

OutputStream中flush()存在的意义就是:刷新此输出流并强制写出所有缓存的输出字节。这里所说的缓存是指应用程序与IO设备之间的内存缓存区,这样做的是因为CPU读写内存的速度比读写IO设备要快得多,设置一个内存缓冲区可以提高CPU利用率。
flush() 是把缓冲区的数据强行输出
        主要用在IO中,即清空缓冲区数据,
    例如:在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。
作者: 杜佳瑞    时间: 2012-8-15 15:54
问题已解决





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