2014-02-06 42 views
1

我一直在阅读最近的oracle.com上的java教程,我正在尝试了解I/O。但也有这么多的东西,其中很多似乎是相同的,如: 数据流 扫描器 的PrintWriter 缓冲流 文件I/O流 过滤流 等了解各种I/O系统java

具体而言,例如,扫描仪和数据流有什么区别?

起初,我可以保持在这一切的顶部,但只有太多的流和我/操作系统。有没有人知道一个很好的教程或网站,可以清楚地了解这一切。我缺乏理解开始变得烦人。

+0

这真的很简单。 '(输入|输出)流'是来自某处的字节流。 'Reader | Writer'也是来自某处的字符串。其他一切都是装饰模式(缓冲等)。 'Scanner'是一个字符流表示符。 P.S不要忘记'Channel's和'RamdomAccessFiles's。 –

回答

1

Scanner可以附接到一个FileStream,或StringReadable,或任何从这些类派生的。把它想象成一个消费者。当你问它时它会吃东西。

A Stream是一个来源。一些输入流有一个信号,说“我输入了!”如果您继续使用已经超出输入的流,Java通常会等待更多输入或者仅引发异常。重要的是要注意,一旦流被消耗,它就会永远消失。一些读者具有将流重置为早期点的机制,但这些奇特的流畅机制不是标准流的一部分。把它们想象成河流。一旦你让部分河流流过,它就消失了。

System.inInputStream的一个示例,即默认挂钩到控制台。想象一下,它是从你的键盘直接喂食。您可以附加扫描仪并尝试使用用户的输入。扫描仪可以捕捉您键入的内容,但如果您没有将其存储在变量中,则键盘不会再打字。

1

这是一个难以回答的问题。我知道以前在学习网络编程时,我有同样的困惑。
你可以看看拉尔斯·沃格尔的教程 - 他写的好代码,使事情变得容易理解:http://www.vogella.com/tutorials/JavaIO/article.html

此外,如果你有一本好书,Java类可能更有意义,你熟悉他们之后。 Elliot“Rusty”Harold编写了一本很好的Java网络编程书籍: Java Network Programming

您需要熟悉“java.io. *”类以及每个类可用于什么。有这么一个原因,因为你会为一种类型的应用程序使用一个特定的类。