getOutputStream and getInputStream which respectively get you pipes to the process’ standard input and output. Data comes out of the Process and you want an InputStream, so it has to be getInputStream. But how can getOutput get you the input while getError gets you the error? OK, call me anal, I can take it. But I’m writing a class right now kinda like Process, and I simply absolutely can’t bring myself to call the input the output and vice versa. So I have getTaskInput, getTaskOutput, and getTaskError, which produce output, input, and input streams respectively. We all have to deal with the confusing nature of reality in our own ways.