IO及泛型

常量池
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,
会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。
mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。
............................................................................................................................
System.in 是属于BufferedInputStream类型

System.out是属于PrintStream类型
System.err也属于PrintStream类型
.............................................................................................................................
PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。它还提供其他两项功能。与其他输出流不同,PrintStream
永远不会抛出 IOException;而是,异常情况仅设置可通过 checkError 方法测试的内部标志。另外,为了自动刷新,可以创建一个 PrintStream;
这意味着可在写入 byte 数组之后自动调用 flush 方法,可调用其中一个 println 方法,或写入一个换行符或字节 ('/n')。

PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。
...........................................................................................................................

输入流:字节流(InputStream)字符流(Reader)
输出流:字节流(OutputStream)字符流(Writer)
.............................................................................................................................
public class BufferedReaderextends Reader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
.............................................................................................................................
isFile()
测试此抽象路径名表示的文件是否是一个标准文件。如果该文件不是一个目录,并且满足其他与系统有关的标准,那么该文件是标准 文件。
由 Java 应用程序创建的所有非目录文件一定是标准文件。就是里面没有子文件的意思。
.................................................................................................................................
isDirectory()
测试此抽象路径名表示的文件是否是一个目录,就是说,该文件里还有其他的文件。
当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true;否则返回 false
.................................................................................................................................
public class FileWriter extends OutputStreamWriter

用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,
可以先在 FileOutputStream 上构造一个 OutputStreamWriter。

文件是否可用或是否可以被创建取决于底层平台。特别是某些平台一次只允许一个 FileWriter(或其他文件写入对象)打开文件进行写入。
在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。

FileWriter 用于写入字符流。要写入原始字节流,请考虑使用 FileOutputStream
...................................................................................................................................
//板面,九寨沟,天柱山
话题:爱情,家乡介绍,大学生活。建校历史,ACM,学习氛围,住宿条件软件学院最好!
///
public abstract int read()
                  throws IOException
从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。
在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
子类必须提供此方法的一个实现。
.....................................................

两种基本的流是:输入流和输出流;
.................................................................

InputStream方法:
三个基本方法:int read()/int read(byte[])/int read(byte[],int,int)
这三个方法提供对输入管道数据的存取。简单读方法返回一个 int 值,它包含从流里读
出的一个字节或者-1,其中后者表明文件结束。其它两种方法将数据读入到字节数组中,并
返回所读的字节数。第三个方法中的两个int 参数指定了所要填入的数组的子范围。


其它方法:void close()/int available()/skip(long)/boolean markSupported()/ void mark(int)/ void reset(int)

...........................................................................

OutputStream方法:
OutputStream 方法
l 三个基本的write()方法
l int write()
l int write(byte [])
l int write(byte[], int ,int )
这些方法写输出流。和输入一样,总是尝试以实际最大的块进行写操作。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

l 其他方法
l void close()
当你完成写操作后,就关闭输出流。如果你有一个流所组成的栈,
就关闭栈顶部的流。这个关闭操作会关闭其余的流。
....................................................................
l void flush()
有时一个输出流在积累了若干次之后才进行真正的写操作。
flush()方法允许你强制执行写操作。
..................................................................
FileInputStream 和FileOutputStream
这些类是结点流,而且正如这个名字所暗示的那样,它们使用磁盘文件。这些类的构造
函数允许你指定它们所连接的文件。要构造一个FileInputStream,所关联的文件必须存在而
且是可读的。如果你要构造一个FileOutputStream 而输出文件已经存在,则它将被覆盖。
FileInputStream infile =
new FileInputStream("myfile.dat");
FileOutputStream outfile =
new FileOutputStream("results.dat");
.............................................................
BufferInputStream 和BufferOutputStream
这些是过滤器流,它们可以提高I/O 操作的效率。
..............................................................
DataInputStream 和DataOutputStream
这些过滤器通过流来读写 Java 基本类。例如:
DataInputStream 方法
byte readByte()
long readLong()
double readDouble()
DataOutputStream 方法
void writeByte(byte)
void writeLong(long)
void writeDouble(double)
注意 DataInputStream 和DataOutputStream 的方法是成对的。
.......................................................................
PipedInputStream 和PipedOutputStream
管道流用来在线程间进行通信。一个线程的 PipedInputStream 对象从另一个线程的
PipedOutputStream 对象读取输入。要使管道流有用,必须有一个输入方和一个输出方。


.............................................................................
文件的操作:一个是写入,一个是读取。
写入:
首先创建新文件:
File file=new File("D://TestFile.txt");
file.createNewFile();//当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件
....................................................................
然后解析该文件,如果是读,将其解析成InputStream,如果是写,将其解析成OutputStream类型的。

但是,也可以用快捷类,FileWriter和FileReader类。应用write和read方法实现
写和读。写完文件时,必须将流关闭。
还可以用FileInputStream


用BufferedInputStream必须用:BufferedInputStream bis=
new BufferedInputStream(in);
其中:in = new FileInputStream("D://TestFile.txt")

将Input改为Output就是写入文件了。其实Input和Output是相对的。
为什么从文件读取叫InputStream呢?
我认为:将文件的数据,读入到内存,这叫Input
从内存存到文件这叫Output。以内存为主导地位。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


..............................................................................
Vector支持同步,ArrayList不同步。两者都是实现List接口。这是两者唯一的区别。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Hashtable以键值存在,也是同步的。实现的是Map
......................................................................................................
List接口,其Vector和ArrayList实现
.....................................................................................................
Set接口调用equals方法,判断对象是否相等,如果相等,则不插入。
....................................................................................................
Map接口,按键值的方法,一一插入及映射。

.........................................................................................................
LinkedList继承Object、AbstractCollection、AbstractList和AbstractSequentialList,其有堆栈的方法。像
public void addFirst(E e),将指定元素插入此列表的开头。
................................................................
public void addLast(E e)将指定元素添加到此列表的结尾。
此方法等效于 add(E)。
...............................................................
Integer封装类和int之间的转换有的问题:
Map<String, Integer> m = new HashMap<String, Integer>();
 // Initialize frequency table from command line
        for (String a : args) {
            Integer freq = m.get(a);
            m.put(a, (freq == null) ? 1 : freq + 1);//这里的整型自动转换为对象,不影响结果。
        }
.............................................................................................
而用:
for(String a:args){
         Integer freq=m.get(m);
         m.put(a, (freq == null) ? new Integer(1).intValue():(freq+new Integer(1).intValue()));//出现了问题!
         //System.out.println(1+freq);
         //不能加,freq一直为空。(原因至今还没用真正的明白)。
        }
...................................................................................................
Map是独立一体的,与collection没有直接的关系。其键值的唯一性是确实的。
其常用的实现类有HashMap和TreeMapHashMap也用到了哈希码的算法,以便快速查找一个键,
TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,
你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,
用put(Object key,Object value)方法即可将一个键与一个值对象相关联。
用get(Object key)可得到与此key对象所对应的值对象。
在Map中用一个keySet方法,获得Map中所用的key值。
..................................................................................................
TreeMap<K,V>基于红黑树(Red-Black tree)的 NavigableMap 实现。
该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,
具体取决于使用的构造方法。
...................................................................................................
TreeMap()比较器怎么定义?
...............................................................................


Set接口也是Collection的一种扩展,其常用具体实现的有:HashSet(非同步的)和TreeSet

 

......................................................................................................
接口Comparable<T>其中T - 可以与此对象进行比较的那些对象的类型
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被
称为它的自然比较方法。

实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。
实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
........................................................................................................
接口 Comparator<T> T - 此 Comparator 可以比较的对象类型
强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法
(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。
还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,
或者为那些没有自然顺序的对象 collection 提供排序
.........................................................................................................
java.util.Arrays
中public static <T> List<T> asList(T... a)
返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)
此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。
返回的列表是可序列化的,并且实现了 RandomAccess。
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:

     List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
.........................................................................................................

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值