A. 安卓app开发 一般用什么语言
Android版移动应用一般采用C/S架构,前台安卓系统开发采用java编程语言,后台服务器server采用PHP技术代码;保证回软件答开发过程中的跨平台性,开放性以及各种网络访问的便利性,同时也为异构系统的良好整合提供保证。
B. java中怎么用io流读写文件
可以通过BufferedReader 流的形式进行流读取,之后通过readLine方法获取内到读取的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个容文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
C. Java中IO缓冲区的原理是什么
如果是边读边写,就会很慢,也伤硬盘。缓冲区就是内存里的一块区域,把数据先存内存里,然后一次性写入,类似数据库的批量操作,这样效率比较高。
调用I\O操作的时候,实际上还是一个一个的读或者写,关键就在,CPU只有一个,不论是几个核心。CPU在系统调用时,会不会还要参与主要操作?参与多次就会花更多的时间。
系统调用时,若不用缓冲,CPU会酌情考虑使用 中断。此时CPU是主动地,每个周期中都要花去一部分去询问I\O设备是否读完数据,这段时间CPU不能做任何其他的事情(至少负责执行这段模块的核不能)。所以,调用一次读了一个字,通报一次,CPU腾出时间处理一次。
而设置缓冲,CPU通常会使用 DMA 方式去执行 I\O 操作。CPU 将这个工作交给DMA控制器来做,自己腾出时间做其他的事,当DMA完成工作时,DMA会主动告诉CPU“操作完成”。这时,CPU接管后续工作。在此,CPU 是被动的。DMA是专门 做 I\O 与 内存 数据交换的,不仅自身效率高,也节约了CPU时间,CPU在DMA开始和结束时做了一些设置罢了。
所以,调用一次,不必通报CPU,等缓冲区满了,DMA 会对C PU 说 “嘿,伙计!快过来看看,把他们都搬走吧”。
综上,设置缓冲,就建立了数据块,使得DMA执行更方便,CPU也有空闲,而不是呆呆地候着I\O数据读来。从微观角度来说,设置缓冲效率要高很多。尽管,不能从这个程序上看出来。 几万字的读写\就能看到差距
D. java中的IO流是什么啊该怎么理解啊
关于你这个方向性的问题我一开始学的时候也觉得反了。后来搞清楚目标对象就懂了。理解版Java的IO流,首先权要把视角放在内存上,而不是放在文件上。
InputStream是用来写入的没错,但不是写入文件中,而是写入内存中。所以InputStream的作用是从文件中读取数据然后写入内存中或者说写入到正在运行的程序中。
而OutputStream同理,是从内存/程序中将数据推送出去,把数据保存到文件中。
以Java程序作为主视角,你就能懂了。Input读取是为了读给程序用,Output写出是程序把数据输出到硬盘上了。
E. 关于java的io读写,缓冲区是如何提高读写效率的
理解是对的。
调用I\O操作的时候,实际上还是一个一个的读或者写,关键就在,CPU只有一个,不论是几个核心。CPU在系统调用时,会不会还要参与主要操作?参与多次就会花更多的时间。
系统调用时,若不用缓冲,CPU会酌情考虑使用 中断。此时CPU是主动地,每个周期中都要花去一部分去询问I\O设备是否读完数据,这段时间CPU不能做任何其他的事情(至少负责执行这段模块的核不能)。所以,调用一次读了一个字,通报一次,CPU腾出时间处理一次。
而设置缓冲,CPU通常会使用 DMA 方式去执行 I\O 操作。CPU 将这个工作交给DMA控制器来做,自己腾出时间做其他的事,当DMA完成工作时,DMA会主动告诉CPU“操作完成”。这时,CPU接管后续工作。在此,CPU 是被动的。DMA是专门 做 I\O 与 内存 数据交换的,不仅自身效率高,也节约了CPU时间,CPU在DMA开始和结束时做了一些设置罢了。
所以,调用一次,不必通报CPU,等缓冲区满了,DMA 会对C PU 说 “嘿,伙计!快过来看看,把他们都搬走吧”。
综上,设置缓冲,就建立了数据块,使得DMA执行更方便,CPU也有空闲,而不是呆呆地候着I\O数据读来。从微观角度来说,设置缓冲效率要高很多。尽管,不能从这个程序上看出来。 几万字的读写\就能看到差距
F. 详细解读Java编程中的IO系统
一. Input和Output
1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型:
1.1 以字节为导向的stream
以字节为导向租基的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面
几种类型:
1) inputstream:
1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
2) StringBufferInputStream:把一个String对象作为InputStream
3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作
4) PipedInputStream:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream:把多个InputStream合并为一个InputStream
2) Outstream
1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
2) FileOutputStream:把信息存入文件中
3) PipedOutputStream:实现了pipe的概念,主要在线程中使用
4) SequenceOutputStream:把多个OutStream合并为一个OutStream
1.2 以Unicode字符为导向的stream
以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型:
1) InputStream
1) CharArrayReader:与ByteArrayInputStream对应
2) StringReader:与StringBufferInputStream对应
3) FileReader:与FileInputStream对应
4) PipedReader:与PipedInputStream对应
2) OutStream
1) CharArrayWrite:与ByteArrayOutputStream对应
2) StringWrite:无与之对应的以字节为导向的stream
3) FileWrite:与FileOutputStream对应
4) PipedWrite:与PipedOutputStream对应
以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字是在操作时的导向不同。如CharArrayReader:和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。
1.3 两种不现导向的stream之间的转换
InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。
2. stream添加属性
2.1 “为stream添加属性”的作用
运用上面介绍的Java中操作IO的API,我们就可完成我们想完成的任何操作了。但通过FilterInputStream和FilterOutStream的子类,我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。
如果我们要往一个文件中写笑宏入数据,我们可以这样操碰型册作:
FileOutStreamfs=newFileOutStream(“test.txt”);
然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,如果我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中”的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStream和FilterOutStream的子类,为FileOutStream添加我们所需要的功能。
2.2FilterInputStream的各种类型
2.2.1用于封装以字节为导向的InputStream
1)DataInputStream:从stream中读取基本类型(int、char等)数据。
2)BufferedInputStream:使用缓冲区
3)LineNumberInputStream:会记录inputstream内的行数,然后可以调用getLineNumber()和setLineNumber(int)
4)PushbackInputStream:很少用到,一般用于编译器开发
2.2.2用于封装以字符为导向的InputStream
1)没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream
2)BufferedReader:与BufferedInputStream对应
3)LineNumberReader:与LineNumberInputStream对应
4)PushBackReader:与PushbackInputStream对应
2.3FilterOutStream的各种类型
2.2.3用于封装以字节为导向的OutputStream
1)DataIOutStream:往stream中输出基本类型(int、char等)数据。
2)BufferedOutStream:使用缓冲区
3)PrintStream:产生格式化输出
2.2.4用于封装以字符为导向的OutputStream
1)BufferedWrite:与对应
2)PrintWrite:与对应
3.RandomAccessFile
1)可通过RandomAccessFile对象完成对文件的读写操作
2)在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写
3)可以直接跳到文件中指定的位置
4.I/O应用的一个例子
importjava.io.*;
publicclassTestIO{
publicstaticvoidmain(String[]args)
throwsIOException{
//1.以行为单位从一个文件读取数据
BufferedReaderin=
newBufferedReader(newFileReader("F:
epalonTestIO.java"));
Strings,s2=newString();
while((s=in.readLine())!=null)
s2+=s+"";
in.close();
//1b.接收键盘的输入
BufferedReaderstdin=
newBufferedReader(newInputStreamReader(System.in));
System.out.println("Enteraline:");
System.out.println(stdin.readLine());
//2.从一个String对象中读取数据
StringReaderin2=newStringReader(s2);
intc;
while((c=in2.read())!=-1)
System.out.println((char)c);
in2.close();
//3.从内存取出格式化输入
try{
DataInputStreamin3=
newDataInputStream(newByteArrayInputStream(s2.getBytes()));
while(true)
System.out.println((char)in3.readByte());
}
catch(EOFExceptione){
System.out.println("Endofstream");
}
//4.输出到文件
try{
BufferedReaderin4=
newBufferedReader(newStringReader(s2));
PrintWriterout1=
newPrintWriter(newBufferedWriter(newFileWriter("F:
epalonTestIO.out")));
intlineCount=1;
while((s=in4.readLine())!=null)
out1.println(lineCount+++":"+s);
out1.close();
in4.close();
}
#p#副标题#e#
catch(EOFExceptionex){
System.out.println("Endofstream");
}
//5.数据的存储和恢复
try{
DataOutputStreamout2=
newDataOutputStream(newBufferedOutputStream(newFileOutputStream("F:
epalonData.txt")));
out2.writeDouble(3.1415926);
out2.writeChars("Thaswaspi:writeChars");
out2.writeBytes("Thaswaspi:writeByte");
out2.close();
DataInputStreamin5=
newDataInputStream(newBufferedInputStream(newFileInputStream("F:
epalonData.txt")));
BufferedReaderin5br=
newBufferedReader(newInputStreamReader(in5));
System.out.println(in5.readDouble());
System.out.println(in5br.readLine());
System.out.println(in5br.readLine());
}
catch(EOFExceptione){
System.out.println("Endofstream");
}
//6.通过RandomAccessFile操作文件
RandomAccessFilerf=
newRandomAccessFile("F:
epalon
test.dat","rw");
for(inti=0;i10
rf.writeDouble(i*1.414);
rf.close();
rf=newRandomAccessFile("F:
epalon
test.dat","r");
for(inti=0;i10
System.out.println("Value"+i+":"+rf.readDouble());
rf.close();
rf=newRandomAccessFile("F:
epalon
test.dat","rw");
rf.seek(5*8);
rf.writeDouble(47.0001);
rf.close();
rf=newRandomAccessFile("F:
epalon
test.dat","r");
for(inti=0;i10
System.out.println("Value"+i+":"+rf.readDouble());
rf.close();
}
}
关于代码的解释(以区为单位):
1区中,当读取文件时,先把文件内容读到缓存中,当调用in.readLine()时,再从缓存中以字符的方式读取数据(以下简称“缓存字节读取方式”)。
1b区中,由于想以缓存字节读取方式从标准IO(键盘)中读取数据,所以要先把标准IO(System.in)转换成字符导向的stream,再进行BufferedReader封装。
2区中,要以字符的形式从一个String对象中读取数据,所以要产生一个StringReader类型的stream。
4区中,对String对象s2读取数据时,先把对象中的数据存入缓存中,再从缓冲中进行读取;对TestIO.out文件进行操作时,先把格式化后的信息输出到缓存中,再把缓存中的信息输出到文件中。
5区中,对Data.txt文件进行输出时,是先把基本类型的数据输出屋缓存中,再把缓存中的数据输出到文件中;对文件进行读取操作时,先把文件中的数据读取到缓存中,再从缓存中以基本类型的形式进行读取。注意in5.readDouble()这一行。因为写入第一个writeDouble(),所以为了正确显示。也要以基本类型的形式进行读取。
6区是通过RandomAccessFile类对文件进行操作。
#p#副标题#e#
G. 谷歌开发者大会的历届会议
此次大会谷歌重点发布了三大智能平台,包括了移动端、可穿戴以及物联网。
2015开发者大会推出:全新的移动端平台Android M,智能穿戴平台Android Wear以及一个全新的物联网平台Brillo。除了三大平台之外,谷歌在此次的IO大会上还针对不同的领域更新了四款软件服务,其中既有Google Now、Chrome、Google Maps,也有全新的照片应用Google Photos。 本届苹果的WWDC刚落下帷幕不久,对移动通信和智能设备行业有着深远影响的另一场重要会议Google I/O 2014也即将启动,作为搜索巨头,2014年的开发者会议将有着一个非常令人激动的主题发布会,那就是Android 5.0 Lollipop系统的发布,已知的消息是新版系统将运行在64位下,并优化了对可穿戴设备甚至车载设备的支持。同时在会上我们还可能会看到Google的最新硬件设备规范,包括下一代的手机、平板、手表、Tango、模块化手机、车载系统和机顶盒产品。
Sundar Pichai回到了扰谨台上,自上届I/O大会以来,Google已经向开发者们支付了超过50亿美元,年增长率为250%。
Pichai承诺场内的所有与会者能够获得相应历李首的礼品:G Watch 或者 Gear Live。
同时Google还将送给与会者Moto 360,但需要等到发布之后。 本届是Google第三次举行I/O大会,于美国东部时间5月19日在旧金山Moscone会展中心举行,约有5000名开发者参加此次会议。本次大会将讨论Android、App Engine、Chrome、Google APIs、Social Web等热门技术话题,是当前Web应用领域重要的技术会议;从Google在会议中的一些新的技术发布和演示中,可以领略最前沿的Web技术应用,肢数分析Google最新的Web发展战略。
H. android io大会啥意思
5月29日,谷歌(微博)在旧金山召开每年一度的I/O全球开发大会,谷歌高管对于安卓生态进行梳理,并集中推出了诸多新产品和新技术。
以下是此次大会披露出的安卓生态的核心数据:
——200万人
谷歌此次开发大会,面向全球六大洲的200万人进行了互联网直播。
——10亿用户
谷歌实权人物皮扎伊透露,全球安卓操作系统的用户已经达到十亿人。在全世界10部智能手机中,有8部安装了安卓系统。
——7种安卓手表
面对穿戴设备尤其是智能手表的出现,谷歌开发了安卓操作系统的分支版本“Android Wear”,该系统也成为苹果手表最重要的竞争对手。最初,全世界仅有2款智能手表采用这一系统,不过目前已经增加到了7种。
——4000款手表软件
目前全球安卓开发者,已经推出了面向安卓手表开发的4000款应用软件。
——70万家支付商户
在此次大会上,谷歌推出了全新升级的智能手机支付工具“安卓支付”。谷歌表示,美国境内的70多万家商户将会支持安卓支付。另外这一支付工具也将可以整合到第三方安卓软件中,比如打车软件Lyft、团购客户端Groupon等。
——35家汽车业伙伴
谷歌早前推出了“安卓汽车”桥接平台,用于将安卓手机的运行画面输出到车载信息娱乐系统上。谷歌在大会上宣布,迄今已经有35家汽车制造商支持了这一平台,其中包括美国福特汽车公司和韩国现代汽车公司。其中,福特汽车公司已经推出了一个基于该平台的软件,可以告知车主哪里有停车位。
——9亿人
谷歌宣布,电子邮箱服务Gmail已经拥有9亿用户。在邮箱市场,这一用户规模已经令人吃惊,不过和谷歌其他拳头产品相比(比如网页搜索、谷歌地图、YouTube视频网站),用户规模还只是小巫见大巫。
——500亿次下载安装
谷歌旗下的Play,是安卓阵营中规模最大的软件下载店和数字内容零售中心。谷歌宣布Play平台在全世界拥有10亿活跃用户,而在过去的12个月时间里,安卓用户一共从Play商店下载、安装了500亿次的安卓应用软件。
——100万虚拟现实用户
谷歌去年推出了简易的纸板制造的虚拟现实辅助工具“Google Cardboard”,这一工具目前在全球获得100万用户。
——100万英里(160万公里)
谷歌宣布旗下自动驾驶汽车已经显示了无事故驾驶100万英里。
I. java中IO和NIO的区别和适用场景
java.NIO包里包括三个基本的组件
lbuffer:因为NIO是基于缓冲的,所以buffer是最底层的必要类,这也是IO和NIO的根本不同,虽然stream等有buffer开头的扩展类,但只是流的包装类,还是从流读到缓冲区,而NIO却是直接读到buffer中进行操作。
因为读取的都是字节,所以在操作文字时,要用charset类进行编解码操作。
lchannel:类似于IO的stream,但是不同的是除了FileChannel,其他的channel都能以非阻塞状态运行。FileChannel执行的是文件的操作,可以直接DMA操作内存而不依赖于CPU。其他比如socketchannel就可以在数据准备好时才进行调用。
lselector:用于分发请求到不同的channel,这样才能确保channel不处于阻塞状态就可以收发消息。
面向流与面向缓冲
Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。Java
IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。
补充一点:NIO的buffer可以使用直接内存缓冲区,该缓冲区不在JVM中,性能会比JVM的缓冲区略好,不过会增加相应的垃圾回收的负担,因为JVM缓冲区的性能已经足够好,所以除非在对缓冲有特别要求的地方使用直接缓冲区,尽量使用JVM缓冲。
阻塞与非阻塞
Java IO是阻塞式的操作,当一个inputstream或outputstream在进行read()或write()操作时,是一直处于等待状态的,直到有数据读/写入后才进行处理.而NIO是非阻塞式的,当进行读写操作时,只会返回当前已经准备好的数据,没有就返回空,这样当前线程就可以处理其他的事情,提高了资源的使用率.
与传统IO的优势
在老的IO包中,serverSocket和socket都是阻塞式的,因此一旦有大规模的并发行为,而每一个访问都会开启一个新线程。这时会有大规模的线程上下文切换操作(因为都在等待,所以资源全都被已有的线程吃掉了),这时无论是等待的线程还是正在处理的线程,响应率都会下降,并且会影响新的线程。
而NIO包中的serverSocket和socket就不是这样,只要注册到一个selector中,当有数据放入通道的时候,selector就会得知哪些channel就绪,这时就可以做响应的处理,这样服务端只有一个线程就可以处理大部分情况(当然有些持续性操作,比如上传下载一个大文件,用NIO的方式不会比IO好)。
通过两个图的比较,可以看出IO是直连的,每个请求都给一条线程来处理,但是NIO却是基于反应堆(selector)来处理,直到读写的数据准备好后,才会通知相应的线程来进行处理。一言以蔽之:“selector不会让channel白占资源,没事的时候给我去睡觉。”
PS:NIO基于字节进行传输,在IO时要注意decode/encode。
更具体的信息请参阅:http://blog.csdn.net/zhansong_1987/article/details/45873861