A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜佳瑞 中级黑马   /  2012-8-14 15:00  /  2120 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



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

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
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的字符串数组参数。

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 毛标 于 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:17
public static void main(String[] args)
main方法的参数数组args主要作用是用于调试程序的,可以在运行时 ...

你的意思是OutPutStream不用刷新也能保存到文件中吗?可是我的印象中只有PrintWrite可以不用刷新啊
回复 使用道具 举报
杜佳瑞 发表于 2012-8-14 17:52
你的意思是OutPutStream不用刷新也能保存到文件中吗?可是我的印象中只有PrintWrite可以不用刷新啊 ...

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

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

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