Java: różnica między PrintStream i PrintWriter

Jaka jest różnica między PrintStreami PrintWriter? Mają wiele wspólnych metod, dzięki czemu często mieszam te dwie klasy. Co więcej, myślę, że możemy ich używać do dokładnie tych samych celów. Ale musi być różnica, w przeciwnym razie byłaby tylko jedna klasa. Przeszukałem archiwa, ale nie mogłem...