没有合适的资源?快使用搜索试试~ 我知道了~
基于java web技术的音乐网站外文翻译.doc
需积分: 5 1 下载量 68 浏览量
2023-08-21
22:54:35
上传
评论
收藏 150KB DOC 举报
温馨提示
试读
22页
基于java web技术的音乐网站外文翻译
资源推荐
资源详情
资源评论
2023 届本科毕业设计(论文)外文翻译
1
毕业设计(论文)外文翻译
学 院
专业班级
学生姓名
学生学号
指导教师
导师职称
2023 届本科毕业设计(论文)外文翻译
2
The Java I/O System
Research on the application of HTML5 and CSS 3 in Web front-end development
Creating a good input/output (I/O) system is one of the more difficult tasks for the language
designer.
This is evidenced by the number of different approaches. The challenge seems to be in
covering all eventualities. Not only are there different sources and sinks of I/O that you want
to communicate with (files, the console, network connections, etc.), but you need to talk to
them in a wide variety of ways (sequential, random-SQLServer2000, buffered, binary,
character, by lines, by words, etc.).
The Java library designers attacked this problem by creating lots of classes. In fact, there
are so many classes for Java’s I/O system that it can be intimidating at first (ironically, the
Java I/O design actually prevents an explosion of classes). There was also a significant change
in the I/O library after Java 1.0, when the original byte-oriented library was supplemented
with char-oriented, Unicode-based I/O classes. In JDK 1.4, the nio classes (for “new I/O,” a
name we’ll still be using years from now) were added for improved performance and
functionality. As a result, there are a fair number of classes to learn before you understand
enough of Java’s I/O picture that you can use it properly. In addition, it’s rather important to
understand the evolution history of the I/O library, even if your first reaction is “don’t bother
me with history, just show me how to use it!” The problem is that without the historical
perspective, you will rapidly become confused with some of the classes and when you should
and shouldn’t use them.
This chapter will give you an introduction to the variety of I/O classes in the standard
Java library and how to use them.
The File class
Before getting into the classes that actually read and write data to streams, we’ll look at a
utility provided with the library to assist you in handling file directory issues.
The File class has a deceiving name; you might think it refers to a file, but it doesn’t. It
can represent either the name of a particular file or the names of a set of files in a directory. If
it’s a set of files, you can ask for that set using the list( ) method, which returns an array of
String. It makes sense to return an array rather than one of the flexible container classes,
because the number of elements is fixed, and if you want a different directory listing, you just
create a different File object. In fact, “FilePath” would have been a better name for the class.
2023 届本科毕业设计(论文)外文翻译
3
This section shows an example of the use of this class, including the associated
FilenameFilter interface.
A directory lister
Suppose you’d like to see a directory listing. The File object can be listed in two ways. If
you call list( ) with no arguments, you’ll get the full list that the File object contains. However,
if you want a restricted list—for example, if you want all of the files with an extension
of .java—then you use a “directory filter,” which is a class that tells how to select the File
objects for display.
The DirFilter class “implements” the interface FilenameFilter. It’s useful to see how
simple the FilenameFilter interface is:
public interface FilenameFilter {
boolean accept(File dir, String name);
}
It says all that this type of object does is provide a method called accept( ). The whole
reason behind the creation of this class is to provide the accept( ) method to the list( ) method
so that list( ) can “call back” accept( ) to determine which file names should be included in the
list. Thus, this structure is often referred to as a callback. More specifically, this is an example
of the Strategy Pattern, because list( ) implements basic functionality, and you provide the
Strategy in the form of a FilenameFilter in order to complete the algorithm necessary for list( )
to provide its service. Because list( ) takes a FilenameFilter object as its argument, it means
that you can pass an object of any class that implements FilenameFilter to choose (even at run
time) how the list( ) method will behave. The purpose of a callback is to provide flexibility in
the behavior of code.
DirFilter shows that just because an interface contains only a set of methods, you’re not
restricted to writing only those methods. (You must at least provide definitions for all the
methods in an interface, however.) In this case, the DirFilter constructor is also created.
The accept( ) method must accept a File object representing the directory that a particular
file is found in, and a String containing the name of that file. You might choose to use or
ignore either of these arguments, but you will probably at least use the file name. Remember
that the list( ) method is calling accept( ) for each of the file names in the directory object to
see which one should be included; this is indicated by the boolean result returned by accept( ).
To make sure the element you’re working with is only the file name and contains no path
information, all you have to do is take the String object and create a File object out of it, then
2023 届本科毕业设计(论文)外文翻译
4
call getName( ), which strips away all the path information (in a platform-independent way).
Then accept( ) uses a regular expression matcher object to see if the regular expression regex
matches the name of the file. Using accept( ), the list( ) method returns an array.
Input and output
I/O libraries often use the abstraction of a stream, which represents any data source or
sink as an object capable of producing or receiving pieces of data. The stream hides the details
of what happens to the data inside the actual I/O device.
The Java library classes for I/O are divided by input and output, as you can see by
looking at the class hierarchy in the JDK documentation. By inheritance, everything derived
from the InputStream or Reader classes have basic methods called read( ) for reading a single
byte or array of bytes. Likewise, everything derived from OutputStream or Writer classes
have basic methods called write( ) for writing a single byte or array of bytes. However, you
won’t generally use these methods; they exist so that other classes can use them—these other
classes provide a more useful interface. Thus, you’ll rarely create your stream object by using
a single class, but instead will layer multiple objects together to provide your desired
functionality. The fact that you create more than one object to create a single resulting stream
is the primary reason that Java’s stream library is confusing.
It’s helpful to categorize the classes by their functionality. In Java 1.0, the library
designers started by deciding that all classes that had anything to do with input would be
inherited from InputStream, and all classes that were associated with output would be
inherited from OutputStream.
Types of InputStream
InputStream’s job is to represent classes that produce input from different sources. These
sources can be:
1. An array of bytes.
2. A String object.
3. A file.
4. A “pipe,” which works like a physical pipe: You put things in at one end and they
come out the other.
5. A sequence of other streams, so you can collect them together into a single stream.
6. Other sources, such as an Internet connection. (This is covered in Thinking in
Enterprise Java.)
2023 届本科毕业设计(论文)外文翻译
5
Each of these has an associated subclass of InputStream. In addition, the
FilterInputStream is also a type of InputStream, to provide a base class for "decorator" classes
that attach attributes or useful interfaces to input streams. This is discussed later.
Types of OutputStream
This category includes the classes that decide where your output will go: an array of bytes
(no String, however; presumably, you can create one using the array of bytes), a file, or a
“pipe.”
In addition, the FilterOutputStream provides a base class for "decorator" classes that
attach attributes or useful interfaces to output streams.
Adding attributes and useful interfaces
The use of layered objects to dynamically and transparently add responsibilities to
individual objects is referred to as the Decorator pattern. (Patterns
are the subject of Thinking
in Patterns (with Java) at www.BruceEckel.com.) The decorator pattern specifies that all
objects that wrap around your initial object have the same interface. This makes the basic use
of the decorators transparent—you send the same message to an object whether it has been
decorated or not. This is the reason for the existence of the “filter” classes in the Java I/O
library: The abstract “filter” class is the base class for all the decorators. (A decorator must
have the same interface as the object it decorates, but the decorator can also extend the
interface, which occurs in several of the “filter” classes).
Decorators are often used when simple subclassing results in a large number of classes in
order to satisfy every possible combination that is needed—so many classes that it becomes
impractical. The Java I/O library requires many different combinations of features, and this is
the justification for using the decorator pattern.There is a drawback to the decorator pattern,
however. Decorators give you much more flexibility while you’re writing a program (since
you can easily mix and match attributes), but they add complexity to your code. The reason
that the Java I/O library is awkward to use is that you must create many classes—the “core”
I/O type plus all the decorators—in order to get the single I/O object that you want.
The classes that provide the decorator interface to control a particular InputStream or
OutputStream are the FilterInputStream and FilterOutputStream, which don’t have very
intuitive names. FilterInputStream and FilterOutputStream are derived from the base classes
of the I/O library, InputStream and OutputStream, which is the key requirement of the
decorator (so that it provides the common interface to all the objects that are being decorated).
Reading from an InputStream with FilterInputStream
剩余21页未读,继续阅读
资源评论
毕业程序员
- 粉丝: 8990
- 资源: 1716
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功